对Command的拓展延伸
执行SQL语句。
Command 对象需要取得将要执行的SQL语句,通过调用该类的多种方法,向数据库提交SQL语句。
ExecuteNonQuery(),ExecuteReader(),ExecuteScalar() 三种方法。
1,ExecuteNonQuery()方法
通常使用它来执行Update、Insert和Delete语句。
该方法返回值意义如下:
对于Update、Insert和Delete语句,返回值为该命令所影响的行数。
对于所有其他类型的语句,返回值为-1。
例1,
string Con = "server=.;database=ChenX;uid=sa;pwd=";
SqlConnection coon = new SqlConnection(Con);
coon.Open();
SqlCommand cmd = new SqlCommand();//创建一个SqlCommand对象
cmd.Connection = coon;//设置Connection属性
cmd.CommandText = "select * from Person where HasNumChild=1";//设置CommandText 的SQL语句 ,(1)查询
cmd.CommandText = "Update Person set HasNumChild=3 Where HasNumChild=1";// (2)更改 HasNumChild 字段
cmd.CommandType = CommandType.Text; //设置 CommandType 属性为Text,使其只执行SQL语句文本形式。
label2.Text = (cmd.ExecuteNonQuery()).ToString();
运行结果:选择执行(1)的时候 返回结果为 -1;
执行(2)的时候 返回结果为,2;即为该命令所影响的行数
2,ExecuteReader() 方法
执行SQL语句,生成一个包含数据的SqlDataReader 对象的实例。
例2,
...//同上
cmd.CommandText = "select * from Person ";
cmd.CommandType = CommandType.Text; //设置 CommandType 属性为Text,使其只执行SQL语句文本形式。
SqlDataReader sdr = cmd.ExecuteReader();//使用ExecuteReader方法实例化一个SqlDataReader对象
while (sdr.Read())
{ //Read() 读取 SqlDataReader
listView1.Items.Add(sdr[2].ToString());
//sdr[2]中的 2 代表读取所要查询表的第3列,从0开始为第1列,依次类推 ,sdr["Age"]这种是返回该表Age字段的那一列结果。
}
注: .Read()的每次调用都会从结果集中返回一行
运行结果: 显示 Person表的所有第三列内容。
顺便大略讲一下 DataReader 对象。 在上一节,将DataReader比作 水直接到用户家里面使用的管子,那么它读取数据的速度快。
DataReader 对象是数据读取器对象,提供只读向前的游标。比如,应用程序需要每次从数据库中取出最新数据,或者只是需要快速读取数据,并不需要修改数据,那可以用它。
有时候可以用它的HasRows属性来判断所查询的表是否有值。
例
...//同上
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
if(sdr.HasRows){ MessageBox.show("数据表有值");
}
else
{MessageBox.show("数据表没有值");
}...
注:在使用SqlDataReader 对象之前,必须打开数据库连接。如果针对一个SqlConnection,创建多个SqlDataReader 对象,则创建下一个SqlDataReader对象之前,要通过Close方法关闭一个SqlDataReader 对象。
3,ExecuteScalar() 方法
在上一节有一个相关的例题,它的主要返回结果集的第一行第一列内容。
他一般与聚合函数一起使用。
聚合函数 | 说明 |
AVG(expr) | 列平均值,该列只包含数字数据 |
COUNT(expr)、COUNT(*) | 列值的计数(列名为指定expr)、表中所有行数 |
MAX(expr) | 列值最大值 |
MIN( expr) |
列值最小值 |
SUM(expr) | 列值的合计 |
其他的以后再补充说明。