黑马程序员技术交流社区
标题: 学习整理 ExecuteNonQuery, ExecuteScalar, ExecuteReader, DataSet [打印本页]
作者: xiaoxiang_04 时间: 2013-2-25 14:56
标题: 学习整理 ExecuteNonQuery, ExecuteScalar, ExecuteReader, DataSet
对于手写SQL连接中,经常会用到ExecuteNonQuery, ExecuteScalar, ExecuteReader, DataSet
它们的区别如下
1. ExecuteNonQuery 方法
用法:ExecuteNonQuery方法用来执行 INSERT、UPDATE、DELETE和其他没有返回值得SQL命令,——比如CREATEDATABASE 和 CREATE TABLE 命令。当使用 INSERT、UPDATE、DELETE时,ExecuteNonQuery返回被命令影响的行数。
代码
using (SqlConnection con = new SqlConnection(constr))
{
con.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = sql;\\sql为 insert、update、delete等不需要返回数据的SQL语句
cmd.ExecuteNonQuery();
}
}
2.ExecuteScalar 方法ExecuteScalar方法执行一个SQL命令返回结果集的第一列的第一行。它经常用来执行SQL的COUNT、AVG、MIN、MAX 和 SUM 函数,这些函数都是返回单行单列的结果集。主要是用于数量的统计,比如select count(*) from table,select avg(name) from table
代码如下
using (SqlConnection con = new SqlConnection(constr))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "select count(*) from message";\\主要用在一些需要返回计算结果SQL语句中
int sum = (int)cmd.ExecuteScalar();
MessageBox.Show(sum.ToString());
}
}
3.ExecuteReader 方法
用法:ExecuteReader 方法存在的目的只有一个:尽可能快地对数据库进行查询并得到结果。ExecuteReader 返回一个DataReader对象:如果在SqlCommand对象中调用,则返回SqlDataReader;如果在OleDbCommand对象中调用,返回的是OleDbDataReader。可以调用DataReader的方法和属性迭代处理结果集。它是一个快速枚举数据库查询结果的机制,是只读、只进。对SqlDataReader.Read的每次调用都会从结果集中返回一行。
代码
using (SqlConnection con = new SqlConnection(constr))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText="select * from message";
using(SqlDataReader reader=cmd.ExecuteReader())
{
while (reader.Read())\\因为ExecuteReader查询完的结果是在数据库里面的,并不是返回到客户端,所以请求ExecuteReader查询结果时,只能一行一行的向数据库服务器申 请,当reader.Read()=true证明还有数据,当reader.Read()=false时表示上回读取的是最后一行数据
{
string name=reader.GetString(2);
MessageBox.Show(name);
}
}
}
}
3.DataSet 方法
与ExecuteReader 类似,都能查询表数据。但是也不尽相同,DataSet 查询的结果返回到客户端而ExecuteReader查询结果在服务器上, DataSet可以返回一个表的数据类型(DataTable),ExecuteReader只能逐行申请数据并不能直接查询整个表的数据。
代码
using (SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=lianxi;User ID=sa;Password="))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "select * from message";
SqlDataAdapter ad=new SqlDataAdapter(cmd);\\执行SQL返回数据
DataSet ds=new DataSet();\\定义DataSet
ad.Fill(ds);\\用返回的数据填充DataSet
DataTable dt=ds.Tables[0];\\读取表0的数据,杨老师说DataSet中可以放多个表,但是大部分的用法就是只有一个表,所以每次读取Tables[0]就可以了
GridView1.datasource=dt;\\将表数据绑定GridView控件,但是这是个效果展示,杨老师很不推荐这样写,支持手写绑定数据DataGrid!
}
}
歇会去。。 欢迎各位讨论学习和批评指正 {:soso_e162:}
作者: 许庭洲 时间: 2013-2-25 22:17
值得学习ing!
作者: 汪振 时间: 2013-3-1 10:02
- public SqlDataReader ExecuteReader(string sql)
- {
- using (SqlConnection conn = new SqlConnection(constr))
- {//到数据库的连接
- conn.Open();
- using (SqlCommand cmd = conn.CreateCommand())
- {//cmd
-
- cmd.CommandText = sql;
-
- return cmd.ExecuteReader();
-
- }
- }
- }
复制代码 比方我把executereader用sqlhelper封装起来了,调用的时候返回一个sqldatareader,然后用while循环,会产生错误,这个办法要怎么解决呢
http://bbs.itheima.com/thread-39115-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |