Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改操作的SQL语句。Command对象主要有以下几种方式:
►SqlCommand:用于向SQL Server数据库发送SQL语句,位于System.Data.SqlClient命名空间。
►OleDbCommand:用于向使用OLE DB公开的数据库发送SQL语句,位于System.Data.OleDb命名空间。例如,Access数据库和MySQL数据库都是OLE DB公开的数据库。
►OdbcCommand:用于向使用ODBC公开的数据库发送SQL语句,位于System.Data.Odbc命名空间。有些数据库如果没有提供相应的连接程序,则可以配置好ODBC连接后,使用OdbcCommand。
►OracleCommand:用于向使用Oracle公开的数据库发送SQL语句,位于System.Data.OracleClient命名空间。在使用OracleCommand向Oracle数据库发送SQL语句时,要引入System.Data.OracleClient命名空间,但是默认情况下是没有该命名控件,此时,需要将程序集System.Data.OracleClient引入到项目中。引入程序集的方法是在项目名称上单击鼠标右键,在弹出的快捷菜单中选择“添加引用”命令,打开“添加引用”对话框。在该对话框中选择System.Data.OracleClient程序集,单击“确定”按钮,即可将其添加到项目中。
Command对象的常用属性及说明
属性名
说明
CommandText
获取或设置要对数据源执行的Transact-SQL语句或存储过程
CommandTimeout
获取或设置在终止执行命令的尝试并生成错误之前的等待
CommandType
获取或设置一个值,该值指示如何解释CommandText属性
Connection
获取或设置SqlCommand类的此实例使用的SqlConnection对象
Parameters
获取SqlParameterCollection对象
Transaction
获取或设置将在其中执行SqlCommand类的SqlTransaction对象
UpdatedRowSource
获取或设置命令结果在由DbDataAdapter类的“Update”方法使用时,如何应用于DataRow对象
Command对象的常用方法及说明
方法名
说明
BeginExecuteNonQuery
启动此SqlCommand对象描述的Transact-SQL语句或存储过程的异步执行
BeginExecuteReader
启动此SqlCommand对象描述的Transact-SQL语句或存储过程的异步执行,并从服务器中检索一个或多个结果集
BeginExecuteXmlReader
启动此SqlCommand对象描述的Transact-SQL语句或存储过程的异步执行,并将结果作为XmlReader对象返回
CreateParameter
创建SqlParameter对象的新实例
EndExecuteNonQuery
完成Transact-SQL语句的异步执行
EndExecuteReader
完成Transact-SQL语句的异步执行,返回请求的SqlDataReader对象
EndExecuteXmlReader
完成Transact-SQL语句的异步执行,将请求的数据以XML形式返回
ExecuteNonQuery
对连接执行Transact-SQL语句并返回受影响的行数
ExecuteReader
将CommandText对象发送到Connection类并生成一个SqlDataReader对象
ExecuteScalar
执行查询,并返回查询所返回的结果集中第一行的第一列,忽略其他行或列
ExecuteXmlReader
将CommandText对象发送到Connection类并生成一个XmlReader对象
ResetCommandTimeout
CommandTimeou属性重置为其默认值
1、设置数据源类型
Command对象有3个重要的属性,分别是Connection、CommandText和CommandType。Connection属性用于设置SqlCommand使用的SqlConnection。CommandText属性用于设置要对数据源执行的SQL语句或存储过程。CommandType属性用于设置指定CommandText的类型。CommandType属性的值是CommandType枚举值,包括StoredProcedure(存储过程的名称)、TableDirect(表的名称)、Text(SQL文本命令)。
如果要设置数据源的类型,则可以通过设置CommandType属性来实现。
2、执行SQL语句
Command对象需要取得将要执行的SQL语句,通过调用该类提供的多种方法,向数据库提交SQL语句。下面介绍SqlCommand对象中的几种执行SQL语句的方法。
(1)ExecuteNonQuery方法
执行SQL语句,并返回受影响的行数,在使用SqlCommand向数据库发送增、删、改命令时,通常使用ExecuteNonQuery方法执行发送的SQL命令。示例代码如下:
//实例化SqlConnection变量conn
conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
//打开连接
conn.Open();
//创建一个SqlCommand对象
SqlCommand cmd = new SqlCommand();
//设置Connection属性,指定使其用conn连接数据库
cmd.Connection = conn;
//设置CommandText属性,以及执行的SQL语句
cmd.CommandText = "updatetb_command set 奖金=50 where 性别='女'";
//设置CommandType属性为Text,使其只执行SQL语句文本形式
cmd.CommandType = CommandType.Text;
//使用ExecuteNonQuery方法执行SQL语句
int i = Convert.ToInt32(cmd.ExecuteNonQuery());
label2.Text= "共有" + i.ToString() + "名女员工获得奖金";
[注]:如果想要执行存储过程,应该将CommandType属性设置为StoredProcedure,将CommandText属性设置为存储过程的名称。
(2)ExecuteReader方法
执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例。示例代码如下
//实例化SqlConnection变量conn
SqlConnection conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
conn.Open();//打开连接
//创建一个SqlCommand对象
SqlCommand cmd = new SqlCommand();
//设置Connection属性,指定其使用conn连接数据库
cmd.Connection = conn;
//设置CommandText属性,以及其执行的SQL语句
cmd.CommandText = "select* from tb_command";
//设置CommandType属性为Text,使其只执行SQL语句文本形式
cmd.CommandType = CommandType.Text;
//使用ExecuteReader方法实例化一个SqlDataReader对象
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read()){//读取SqlDataReader
//将内容添加到listView1控件中
listView1.Items.Add(sdr[1].ToString());
}
conn.Dispose();//释放连接
(3)ExecuteScalar方法
执行SQL语句,返回结果集中的第一行的第一列。如果结果集为空,返回空引用。示例代码如下所示:
conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
conn.Open();
//创建一个SqlCommand对象
SqlCommand cmd = new SqlCommand();
//设置Connection属性
cmd.Connection = conn;
//设置CommandText属性以及SQL语句
cmd.CommandText = "selectcount(*) from TableName";
//设置CommandText属性为Text,使其只执行SQL语句文本形式
cmd.CommandType = CommandType.Text;
//使用ExecuteScalar方法获取指定数据表中的数据数量
int i = Convert.ToInt32(cmd.ExecuteScalar());
label2.Text= "数据表中共有:" + i.ToString() + "条数据";