一篇搞定SqlDataReader
2011-12-27 14:28
309 查看
ado.net提供了丰富的数据库操作,在这些操作中SqlConnection和SqlCommand类是必须使用的,但接下来可以分为两类操作:
一类是用SqlDataReader直接一行一行的读取数据库。
第二类是SqlDataAdapter联合DataSet来读取数据。
两者比较:
SqlDataReader由于是直接访问数据库,所以效率较高。但使用起来不方便。
SqlDataAdapter可以把数据库的数据缓存在内存中,以数据集的方式进行填充。这种方式使用起来更方,便简单。但性能较第一种稍微差一点。(在一般的情况下两者的性能可以忽略不计。)
先看一个比较简单的代码:
多表操作的片段代码
cmd.Parameters.Add("@ID", SqlDbType.Int);
cmd.Parameters["@ID"].Value = 1;//给参数sql语句的参数赋值
SqlDataAdapter adapter = new SqlDataAdapter();//构造SqlDataAdapter
adapter.SelectCommand = cmd;//与sql命令对象绑定,这个必不可少
SqlCommandBuilder builder =new SqlCommandBuilder(adapter);//在构造好了SqlDataAdapter对象 //加上此句代码 如果没加则会提示:当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand错误
DataSet ds = new DataSet();
adapter.Fill(ds,"table1");//填充数据。第二个参数是数据集中内存表的名字,可以与数据库中的不同
//Fill方法其实是隐藏的执行了Sql命令对象的CommandText
//填充完了后,就可以方便的访问数据了。例如
WriteLine(ds.Tables["table1"].Rows[0][1]);
//修改操作
ds.Tables["table1"].Rows[0][1] ="Sample2";//此句代码只是修改了数据集中某够值
//更新到数据库
adapter.Update(ds, "table1");//把内存中的数据同步到数据库中
复制代码
上面的修改代码很简单,原理就是修改了内存中数据集的数据,然后调用一下Update()方法就同步到数据库中去了。SqlDataAdapter帮我们自动生成了Sql语句,并且在这里Update()方法是带了事务处理功能的。其他的删除,增加操作同理,在对内存中的数据集进行相关修改后,只需要调用一下Update()方法即可同步到数据库中去。但遗憾的是,目前这种方式只支持单表的操作,不支持任何与多表相关的操作(包括同一视图中来自不同表的列)。
注意:当提示对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。错误时
错误原因:select 代码没有包含主键。例如select name from products = @ID 只选中了一个则提示此错误
一类是用SqlDataReader直接一行一行的读取数据库。
第二类是SqlDataAdapter联合DataSet来读取数据。
两者比较:
SqlDataReader由于是直接访问数据库,所以效率较高。但使用起来不方便。
SqlDataAdapter可以把数据库的数据缓存在内存中,以数据集的方式进行填充。这种方式使用起来更方,便简单。但性能较第一种稍微差一点。(在一般的情况下两者的性能可以忽略不计。)
先看一个比较简单的代码:
多表操作的片段代码
cmd.Parameters.Add("@ID", SqlDbType.Int);
cmd.Parameters["@ID"].Value = 1;//给参数sql语句的参数赋值
SqlDataAdapter adapter = new SqlDataAdapter();//构造SqlDataAdapter
adapter.SelectCommand = cmd;//与sql命令对象绑定,这个必不可少
SqlCommandBuilder builder =new SqlCommandBuilder(adapter);//在构造好了SqlDataAdapter对象 //加上此句代码 如果没加则会提示:当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand错误
DataSet ds = new DataSet();
adapter.Fill(ds,"table1");//填充数据。第二个参数是数据集中内存表的名字,可以与数据库中的不同
//Fill方法其实是隐藏的执行了Sql命令对象的CommandText
//填充完了后,就可以方便的访问数据了。例如
WriteLine(ds.Tables["table1"].Rows[0][1]);
//修改操作
ds.Tables["table1"].Rows[0][1] ="Sample2";//此句代码只是修改了数据集中某够值
//更新到数据库
adapter.Update(ds, "table1");//把内存中的数据同步到数据库中
复制代码
上面的修改代码很简单,原理就是修改了内存中数据集的数据,然后调用一下Update()方法就同步到数据库中去了。SqlDataAdapter帮我们自动生成了Sql语句,并且在这里Update()方法是带了事务处理功能的。其他的删除,增加操作同理,在对内存中的数据集进行相关修改后,只需要调用一下Update()方法即可同步到数据库中去。但遗憾的是,目前这种方式只支持单表的操作,不支持任何与多表相关的操作(包括同一视图中来自不同表的列)。
注意:当提示对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。错误时
错误原因:select 代码没有包含主键。例如select name from products = @ID 只选中了一个则提示此错误
相关文章推荐
- 一篇文章搞定SqlDataAdapter
- 一篇文章搞定SqlDataAdapter
- 一篇文章搞定SqlDataAdapter
- 一篇文章搞定SqlDataAdapter
- 一篇文章搞定SqlDataAdapter
- [转]一篇文章搞定SqlDataAdapter
- C# SqlDataAdapter和SqlDataReader的区别
- SqlDataReader,DataTable 判断是否存在某列的方法
- 将不确定变为确定~真的是SqlDataReader引起的超时?
- sqlDataReader使用需注意的
- 使用SqlDataReader注意的几点
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 菜鸟学习C#数据库实例练习使用SqlDataReader,SqlCommand SqlConnection
- SqlDataReader转成DataTable
- SqlDataReader和SqlDataAdapter
- SqlDataReader 类
- 关于sqldatareader和sqlconnection
- SqlConnection,SqlTransaction,SqlDataReader解说
- C# 使用SqlDataReader方式使用数据做查询的例子
- SqlDataReader的Read方法