一、ADO.NET简介
二、ADO.NET的组成
①System.Data → DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint,DataColumnMapping,DataTableMapping
②System.Data.Coummon → 各种数据访问类的基类和接口
③System.Data.SqlClient → 对Sql Server进行操作的数据访问类
主要有: a) SqlConnection → 数据库连接器
b) SqlCommand → 数据库命名对象
c) SqlCommandBuilder → 生存SQL命令
d) SqlDataReader → 数据读取器
e) SqlDataAdapter → 数据适配器,填充DataSet
f) SqlParameter → 为存储过程定义参数
g) SqlTransaction → 数据库事物
三、Connection连接对象
Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。所有Connection对象的基类都是DbConnection类。
3.1、连接字符串
基本语法:数据源(Data Source)+数据库名称(Initial Catalog)+用户名(User ID)+密码(Password)
3.1.1、SQL Server连接字符串
标准安全连接:
Data Source=.;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;或者
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Trusted_Connection=False;
可信连接:
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;或者
Server=myServerAddress;Database=myDatabase;Trusted_Connection=True;
3.1.2、Access连接字符串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\myDatabase.mdb;User Id=admin;Password=;
3.1.3、MySQL连接字符串
Server=myServerAddress;Database=myDatabase;Uid=myUsername;Pwd=myPassword;
3.1.4、DB2连接字符串
Server=myAddress:myPortNumber;Database=myDatabase;UID=myUsername;PWD=myPassword;
3.1.5、Oracle连接字符串
Data Source=TORCL;User Id=myUsername;Password=myPassword;
3.2、连接到数据库
Connection对象有两个重要属性:
(1)ConnectionString:表示用于打开 SQL Server 数据库的字符串;
(2)State:表示 Connection 的状态,有Closed和Open两种状态。
Connection对象有两个重要方法:
(1)Open()方法:指示打开数据库;
(2)Close()方法:指示关闭数据库。
四、Command对象
Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。
Command主要有三个方法:
4.1、ExecuteNonQuery
ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作。
4.2、ExecuteScalar ()
ExecuteScalar ()从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar ()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列。
executeScalar主要用于查询单行单列的值,如聚合函数(count,max,min,agv,sum)。
4.3、ExecuteReader 获得数据
ExecuteReader用于实现只进只读的高效数据查询。
ExecuteReader:返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。
使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:
一种是基于序号的查找
一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。
五、综上写了一个DBherper帮助类示范代码:
手写的DBHerper帮助类需要引入System.Data;和System.Data.SqlClient;俩个命名空间
1 public static class DBHerper 2 { 3 //using 可以帮我们连接用完后会被自动释放连接,不用手动的去写Close(); 4 public static string strsql = "Server=192.168.1.18; Database=yourDatabase; User=sa;password=yourpassword";//连接数据库对象的字符串 5 /// <summary> 6 /// 返回查询结果受影响的行数 7 /// </summary> 8 /// <param name="sql">要执行的SQL语句</param> 9 /// <param name="ps"></param> 10 /// <returns></returns> 11 public static int ExecuteNonQuery(string sql,params SqlParameter[] ps) 12 { 13 //数据库连接对象 14 using(SqlConnection conn=new SqlConnection(strsql)) 15 { 16 //创建命令对象,指定要执行sql语句与连接对象conn 17 using (SqlCommand cmd=new SqlCommand(sql,conn)) 18 { 19 //打开连接 20 conn.Open(); 21 cmd.Parameters.AddRange(ps); 22 //执行,返回影响行数 23 return cmd.ExecuteNonQuery(); 24 } 25 } 26 } 27 /// <summary> 28 /// 返回查询结果首行首列 29 /// </summary> 30 /// <param name="sql">要执行的SQL语句</param> 31 /// <param name="ps"></param> 32 /// <returns></returns> 33 public static object ExecuteScalar(string sql, params SqlParameter[] ps) 34 { 35 //数据库连接对象 36 using (SqlConnection conn = new SqlConnection(strsql)) 37 { 38 //创建命令对象,指定要执行sql语句与连接对象conn 39 using (SqlCommand cmd = new SqlCommand(sql, conn)) 40 { 41 //打开连接 42 conn.Open(); 43 cmd.Parameters.AddRange(ps); 44 //执行查询返回单行单列的值,Object类型 45 return cmd.ExecuteScalar(); 46 } 47 } 48 } 49 /// <summary> 50 /// 获得一个DataTable表 51 /// </summary> 52 /// <param name="sql">要执行的SQL语句</param> 53 /// <param name="ps">参数</param> 54 /// <returns></returns> 55 public static DataTable GetDataTable(string sql, params SqlParameter[] ps) 56 { 57 //数据库连接对象 58 using (SqlConnection conn = new SqlConnection(strsql)) 59 { 60 using (SqlDataAdapter da = new SqlDataAdapter(sql, conn)) 61 { 62 conn.Open(); 63 da.SelectCommand.Parameters.AddRange(ps); 64 DataTable dt = new DataTable(); 65 da.Fill(dt); 66 return dt; 67 } 68 } 69 } 70 /// <summary> 71 /// 72 /// </summary> 73 /// <param name="sql">要执行的SQL语句</param> 74 /// <param name="ps">参数</param> 75 public static void SqlDataReader(string sql, params SqlParameter[] ps) 76 { 77 //数据库连接对象 78 using (SqlConnection conn = new SqlConnection(strsql)) 79 { 80 using (SqlCommand cmd = new SqlCommand(sql, conn)) 81 { 82 //执行查询返回结果集 83 SqlDataReader reader = cmd.ExecuteReader(); 84 //下移游标,读取一行,如果没有数据了则返回false 85 while(reader.Read()) 86 { 87 reader.GetString(1); 88 } 89 } 90 } 91 } 92 }