ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ADO编程入门知识点

2026/8/17 0:15:00 拓冰建站 浏览量
ADO编程入门知识点

第一章 数据库的连接

namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { string sql = "server=.;uid=sa;pwd=123;database=AAA"; using (SqlConnection con = new SqlConnection(sql))//创建数据库连接对象 { try { con.Open();//打开链接 Console.WriteLine("数据库连接成功!"); } catch (Exception ex) { Console.WriteLine(ex.Message);//获取异常 } finally { con.Close();//关闭连接 } //获取链接的相关参数 Console.WriteLine(con.ConnectionString); Console.WriteLine(con.State); } } } }

步骤一:string sql=“数据库的账户密码和所需要调用的数据库”

步骤二:创建数据库的连接对象 SqlConnection并且new一个新对象在无参里面放入刚刚string的数据库变量名

步骤三:打开数据库使用con.open() 为了防止出错使用try catch语句做一个异常捕获

步骤四:为了防止数据库一直开启 finally中加入con.close关闭数据库

相关参数connectionstring可以拿到数据库的用户信息,state可以拿到当前数据库的状态

第二章 Command的增删改查

Command 的常用属性:

CommandTex 获取或设置对数据库执行的T-Sql命令

Connection 获取或者设置连接数据库的Connection对象

Command 的常用方法:

ExecuteNoQuery:执行SQL语句,并返回受影响的行数为int值

ExcuteReader:执行查询命令,并且DateReader对象

ExecuteScalar:执行查询命令,返回结果集中首航首列的值(如果需要判断是否执行需要强制转换为int值类型)

eg:

using (SqlConnection con = new SqlConnection(conStr))//创建数据库连接对象 { try { con.Open();//打开链接 //Console.WriteLine("数据库连接成功!"); //写SQL语句 string sql = string.Format("insert into Book values('hhee','2000','黑鬼','武侠')"); //创建命令对象 SqlCommand cmd = new SqlCommand(sql, con);//先放语句再放对象 //执行 int count = cmd.ExecuteNonQuery();//ExcuteNonQuery是into类型的值 if (count>0) { Console.WriteLine("添加数据成功"); } else { Console.WriteLine("数据添加失败"); } }

(增删改查其实就是修改SQL的语句其他的不用改)

登录界面使用ExecuteScalar

using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 登录程序 { internal class Program { static void Main(string[] args) { SqlConnection con = new SqlConnection(@"server=.;uid=sa;pwd=123;database=AAA");//一步到省略了string try { con.Open(); string SQL = string.Format(@"select * from Book where bPrice =102 and btId='爱情小说'"); SqlCommand com = new SqlCommand(SQL, con); //判断是否添加成功 int count = Convert.ToInt32(com.ExecuteScalar()); if (count > 0) { Console.WriteLine("登录成功"); } else { Console.WriteLine("登录失败"); } } catch (Exception e) { Console.WriteLine(e.Message); } finally { con.Close(); } } } }

防注入提醒!!!

为了防止注入我们可以给参数赋值并且在SQL语句的字段加上变量 再使用

com.Paramaters.Addwithvalue("SQL值段,变量名")注意变量名一定要提前命名或者接收值

string SQL = string.Format(@"select * from Book where bPrice =@bPrice and btId=@btId"); SqlCommand com = new SqlCommand(SQL, con); //防注入 给参数进行赋值 com.Parameters.AddWithValue("bPrice",bPrice); com.Parameters.AddWithValue("bPrice",bPrice);

注意:

如果没有在对象前面使用using的话 那么在后面就要加上finally{con.close}来关闭程序 释放内存空间

考虑到冗杂问题可以对连接数据库的行为进行封装处理例如

创建方法类CUD 然后传入SQL语句 再做判断命名一个int类型的值来接CUD

第三章 DateReader

优点:边读取边修改数据

方法:

Read:使得datareader前进到下一条记录,如果有下一条记录返回true否则返回false

Close: 关闭datareader对象

Getname:获取指定列的名称

con.Open();//打开 string sql = string.Format(@"SELECT * FROM Book");//输SQL语句 SqlCommand cmd = new SqlCommand(sql, con); using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { } }

后面通过dr.出对象

第四章 DataSet 内存虚拟数据库(断开式核心)

// 创建内存数据集 DataSet ds = new DataSet("MyDataSet"); // 创建数据表并加入数据集 DataTable table = new DataTable("MyTable"); ds.Tables.Add(table); // 添加列 table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); // 添加行数据 table.Rows.Add(1, "张三"); // 修改、删除、筛选行 DataRow row = table.Rows[0]; row["Name"] = "李四"; table.Rows[1].Delete(); DataRow[] filter = table.Select("ID > 0");

1,通过MySqlDataAdapter.Fill()把数据库数据填充到 DataSet

2 ,修改 DataSet 内数据,通过 DataAdapter 同步更新到数据库

3. 加载 XML 文件 / 数据流生成 DataSet

第五章 MySqlDataAdapter

string sql = "select * from users"; MySqlDataAdapter da = new MySqlDataAdapter(sql, con); DataSet ds = new DataSet(); // 填充数据,给数据表命名useInfo da.Fill(ds, "useInfo"); // 读取内存表数据 DataTable table = ds.Tables["useInfo"]; foreach(DataRow row in table.Rows) { Console.WriteLine(row["username"]); }

1,Fill ():查询数据库,自动创建 Command、打开连接,数据填充到 DataSet;

2,Update ():将 DataSet 中新增 / 修改 / 删除的数据同步回数据库。

第六章 MySQL 事务处理 MySqlTransaction

MySqlConnection con = new MySqlConnection(connStr); con.Open(); // 开启最高隔离级别事务 MySqlTransaction tran = con.BeginTransaction(IsolationLevel.Serializable); try { // 扣钱SQL MySqlCommand com1 = new MySqlCommand("update account set Balance=Balance-500 where name='zhangsan'", con); com1.Transaction = tran; com1.ExecuteNonQuery(); // 加钱SQL MySqlCommand com2 = new MySqlCommand("update account set Balance=Balance+500 where name='lisi'", con); com2.Transaction = tran; com2.ExecuteNonQuery(); tran.Commit(); // 全部执行成功提交 } catch(Exception ex) { tran.Rollback(); // 出错回滚 Console.WriteLine(ex.Message); } finally { con.Close(); }

1,打开数据库连接;

2,BeginTransaction()开启事务,指定隔离级别,

3,所有 Command 绑定当前 Transaction 执行;

4,无异常执行Commit()提交;捕获异常执行Rollback()回滚。

第七章 DBHelper 数据库通用工具类封装

统一管理连接字符串、重复数据库操作代码,减少冗余,提升维护性。

ExecuteNonQuery():增删改操作,自动释放连接;

ExecuteScalar():单行单列聚合查询;

ExecuteReader():返回数据流读取器;可扩展 FillDataSet () 方法。

// 连接字符串 string connStr = "server=localhost;uid=root;pwd=root;database=db1;port=3306"; // 实例化工具类 DBHelper db = new DBHelper(connStr); string sql = "select count(*) from users where username='lisi' and password='123'"; int count = Convert.ToInt32(db.ExecuteScalar(sql)); if(count > 0) Console.WriteLine("登录成功"); 五、核心知识点总结速记

本周核心知识点总结

1.连接 MySQL 必备:引入MySql.Data.dll+using MySql.Data.MySqlClient;

2.Connection 负责通路,Command 负责执行 SQL;

3.DataReader:连接、只读、流式读取;DataSet:断开、内存完整数据表;

4.DataAdapter 是数据库和 DataSet 的桥梁,Fill 填充、Update 更新;

5.事务保证多 SQL 原子性,Commit 提交,Rollback 回滚;

6.DBHelper 封装通用操作,避免重复写连接、关闭代码;

7.数据库连接使用后必须 Close,推荐 try-finally/using 自动释放资源。