一、SqlConnection对象
第一次需要连接数据库时要和服务器握手,解析连接字符串,授权,约束的检查等等操作,而物理连接建立后,这些操作就不会去做了(默认使用了连接池技术)。
1 SqlConnection conn = new SqlConnection(connStr)
小技巧:测试数据库是否能被成功链接,可以新建一个xxx.UDL文件,打开后输入实例名和密码,即可测试。
二 、SqlCommand对象
2.1 SqlCommand常用属性
① CommandText 属性
T-SQL语句或者存储过程的名字。
② CommandType属性
表示CommandText属性种类。
常用值:Text(默认值,CommandText为T-SQL语句)
StoredProcedure (CommandText为存储过程的名字)
③ Parameters属性
是一个SqlParameterCollection对象,存储用到的SqlParameter。
常用方法:SqlCommand.Parameters.Add(p);添加一个参数,p为一个SqlParameter对象
SqlCommand.Parameters.Add(ps);添加一个参数,ps为一个SqlParameter数组
2.2 SqlCommand的三种execute方法
① SqlCommand.ExecuteNonQuery 方法
使用场景:update,insert,delete
返回值:受影响的行数,不是上边三种情况或者回滚时返回-1。
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。如果正在执行插入或更新操作的表上存在触发器,则返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
② SqlCommand. ExecuteScalar 方法
使用场景:select
返回值:查询结果集的首行首列值,类型为object。结果集为空时返回null。
③ SqlCommand.ExecuteReader 方法
特点:在线的,读取过程必须和数据库保持连接
使用场景:select
返回值:SqlDataReader对象
using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand com = new SqlCommand("select * from userinfo where id<@id", conn)) { conn.Open(); SqlParameter par = new SqlParameter("@id", System.Data.SqlDbType.Int) { Value = 100 }; com.Parameters.Add(par); SqlDataReader reader = com.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["username"]);//数据库中列名 Console.WriteLine(reader[1]);//1为索引 Console.WriteLine(reader.GetValue(1));//1为索引 } reader.Close();//释放资源 Console.ReadKey(); } }
三、SqlDataAdapter对象
特点:离线方式,读取整个结果集保存在内存,不需要一直连接数据库(自动打开和关闭数据库连接)
using (SqlConnection conn = new SqlConnection(connStr)) { SqlDataAdapter adpter = new SqlDataAdapter("select * from userinfo", conn); DataTable dt = new DataTable(); //SqlDataAdapter内部获取数据是通过调用SqlDataReader来实现的 //执行Fill方法时,它会打开到数据库的SqlConnection, 创建或使用一个SqlCommand,使用SqlCommand.ExecuteReader()方法 //通过SqlDataReader从数据库读取数据, 结束行的读取之后, SqlDataReader和SqlConnection会被关闭. adpter.Fill(dt); for (int i = 0; i < dt.Rows.Count; i++) { Console.WriteLine(dt.Rows[i]["username"]); } Console.ReadKey(); }