摘要
使用Connection对象与数据源建∥.连接后,可以使用Command对象对数据源执行查询、添加、删除利和修收等各种操作,操作实现的方可以是使用SQL语句,也可以是使用存储过程。根据.NET Framework数据提供程序的不同Command对象可以分成4种,分别是SqlCommand、OleDbCommand、OdbcCommand和DracleCommand,在实际的编程过程中应该根据访问的数据源不同,选择相对应的Command对象。
正文
属性
CommandText | 获取或设置要在数据源中执行的 Transact-SQL 语句、表名或存储过程。 |
CommandTimeout | 获取或设置在终止尝试执行命令并生成错误之前的等待时间(以秒为单位)。 |
CommandType | 获取或设置一个值,该值指示解释 CommandText 属性的方式。 |
Connection | 获取或设置 SqlCommand 的此实例使用的 SqlConnection。 |
DbConnection | 获取或设置此 DbConnection 使用的 DbCommand。 |
DbParameterCollection | 获取 DbParameter 对象的集合。 |
DbTransaction | 获取或设置将在其中执行此 DbCommand 对象的 DbTransaction。 |
DesignTimeVisible | 获取或设置一个值,该值指示命令对象是否应在 Windows 窗体设计器控件中可见。 |
Notification | 获取或设置一个指定绑定到此命令的 SqlNotificationRequest 对象的值。 |
Parameters | 获取 SqlParameterCollection。 |
Transaction | 获取或设置要在其中执行 SqlTransaction 的 SqlCommand。 |
UpdatedRowSource | 获取或设置命令结果如何应用于 DataRow Update 方法 DbDataAdapter的用法。 |
方法
BeginExecuteNonQuery() | 启动此 SqlCommand 描述的 Transact-SQL 语句或存储过程的异步执行。 |
BeginExecuteNonQuery(AsyncCallback, Object) | 在给定回调过程和状态信息的情况下,启动此 SqlCommand 描述的 Transact-SQL 语句或存储过程的异步执行。 |
BeginExecuteReader() | 启动此 SqlCommand 描述的 Transact-SQL 语句或存储过程的异步执行,并从服务器中检索一个或多个结果集。 |
BeginExecuteReader(AsyncCallback, Object) | 在给定回调过程和状态信息的情况下,启动此 SqlCommand 描述的 Transact-SQL 语句或存储过程的异步执行,并从服务器中检索一个或多个结果集。 |
BeginExecuteReader(AsyncCallback, Object, CommandBehavior) | 在给定回调过程和状态信息的情况下,通过使用 CommandBehavior 值之一并从服务器中检索一个或多个结果集,启动由此 SqlCommand 描述的 Transact-SQL 语句或存储过程的异步执行。 |
BeginExecuteReader(CommandBehavior) | 通过使用 CommandBehavior 值之一,启动此 SqlCommand 描述的 Transact-SQL 语句或存储过程的异步执行。 |
BeginExecuteXmlReader() | 启动此 SqlCommand 描述的 Transact-SQL 语句或存储过程的异步执行,并将结果作为 XmlReader 对象返回。 |
BeginExecuteXmlReader(AsyncCallback, Object) | 通过使用回调过程,启动此 SqlCommand 描述的 Transact-SQL 语句或存储过程的异步执行,并将结果作为 XmlReader 对象返回。 |
Cancel() | 尝试取消 SqlCommand 的执行。 |
CreateDbParameter() | 创建 DbParameter 对象的新实例。 |
CreateParameter() | 创建 SqlParameter 对象的新实例。 |
EndExecuteNonQuery(IAsyncResult) | 完成 Transact-SQL 语句的异步执行。 |
EndExecuteReader(IAsyncResult) | 完成 Transact-SQL 语句的异步执行,从而返回请求的 SqlDataReader。 |
EndExecuteXmlReader(IAsyncResult) | 完成 Transact-SQL 语句的异步执行,从而将请求的数据以 XML 形式返回。 |
ExecuteDbDataReader(CommandBehavior) | 针对其连接执行命令,返回可用于访问结果的命令 DbDataReader 。 |
ExecuteDbDataReaderAsync(CommandBehavior, CancellationToken) | 提供程序应执行该方法对 ExecuteReader 重载提供非默认的实现。 |
ExecuteNonQuery() | 对连接执行 Transact-SQL 语句并返回受影响的行数。 |
ExecuteNonQueryAsync() | 一个异步版本 ExecuteNonQuery(),它对其连接对象执行命令,返回受影响的行数。 |
ExecuteNonQueryAsync(CancellationToken) | 异步版本,该版本ExecuteNonQuery()针对连接执行 Transact-SQL 语句,并返回受影响的行数。 取消标记可用于在命令超时超过前请求放弃操作。 将通过返回的任务对象报告异常。 |
ExecuteReader() | 将 CommandText 发送到 Connection,并生成 SqlDataReader。 |
ExecuteReader(CommandBehavior) | 将 CommandText 发送到 Connection,并使用 CommandBehavior 值之一生成 SqlDataReader。 |
ExecuteReaderAsync() | ExecuteReader() 的异步版本,它可以将 CommandText 发送到 Connection,并生成 SqlDataReader。 将通过返回的任务对象报告异常。 |
ExecuteReaderAsync(CancellationToken) | ExecuteReader() 的异步版本,它可以将 CommandText 发送到 Connection,并生成 SqlDataReader。 |
ExecuteReaderAsync(CommandBehavior) | ExecuteReader(CommandBehavior) 的异步版本,用于将 CommandText 发送到 Connection,并生成一个 SqlDataReader。 将通过返回的任务对象报告异常。 |
ExecuteReaderAsync(CommandBehavior, CancellationToken) | ExecuteReader(CommandBehavior) 的异步版本,它可以将 CommandText 发送到 Connection,并生成 SqlDataReader。 |
ExecuteScalar() | 执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。 |
ExecuteScalarAsync() | 异步版本的 ExecuteScalar()命令执行该命令,并返回第一个返回结果集中第一行的第一列。 将忽略所有其他列、行和结果集。 |
ExecuteScalarAsync(CancellationToken) | ExecuteScalar() 的异步版本,该版本异步执行查询,并返回由查询返回的结果集中的第一行的第一列。 忽略其他列或行。 |
ExecuteXmlReader() | 将 CommandText 发送到 Connection,并生成一个 XmlReader 对象。 |
ExecuteXmlReaderAsync() | ExecuteXmlReader() 的异步版本,可以将 CommandText 发送到 Connection,并生成 XmlReader 对象。 |
ExecuteXmlReaderAsync(CancellationToken) | ExecuteXmlReader() 的异步版本,可以将 CommandText 发送到 Connection,并生成 XmlReader 对象。 |
ResetCommandTimeout() | 将 CommandTimeout 属性重置为其默认值。 |
Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为
CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。Command主要有三个方法:
- ExecuteNonQuery
- ExecuteScalar
- ExecuteReader
ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作。
string sql = "INSERT INTO wms_material(material_no, mlfb, description, repair_type, location" +
", actual_qty, qty, notification_no,urequestid) VALUES ('" + txtMaterialNo.Text + "','" + txtMlfb.Text
+ "','" + txtDescription.Text + "','" + cboRepairType.Text + "','" + txtLocation.Text
+ "'," + nudActualQty.Value + "," + nudQty.Value + ",'" + txtNotificationNo.Text + "','" + Guid.NewGuid().ToString() + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
int rows = cmd.ExecuteNonQuery();
if (rows > 0)
{
MessageBox.Show("保存数据成功!");
this.Close();
}
else
{
MessageBox.Show("保存数据出错!");
}
使用SqlParameter参数
string sql = "update wms_material set material_no=@material_no, mlfb=@mlfb,description=@description,repair_type=@repair_type" +
",location=@location,actual_qty=@actual_qty,qty=@qty,notification_no=@notification_no where id=@id";
SqlTransaction transaction = conn.BeginTransaction();
SqlCommand sqlcom = new SqlCommand(sql, conn);
try
{
sqlcom.Transaction = transaction;
sqlcom.Parameters.Add(new SqlParameter("@material_no", txtMaterialNo.Text));
sqlcom.Parameters.Add(new SqlParameter("@mlfb", txtMlfb.Text));
sqlcom.Parameters.Add(new SqlParameter("@description", txtDescription.Text));
sqlcom.Parameters.Add(new SqlParameter("@repair_type", cboRepairType.Text));
sqlcom.Parameters.Add(new SqlParameter("@location", txtLocation.Text));
sqlcom.Parameters.Add(new SqlParameter("@actual_qty", nudActualQty.Text));
sqlcom.Parameters.Add(new SqlParameter("@qty", nudQty.Text));
sqlcom.Parameters.Add(new SqlParameter("@notification_no", txtNotificationNo.Text));
sqlcom.Parameters.Add(new SqlParameter("@id", id));
sqlcom.ExecuteNonQuery();
transaction.Commit();
MessageBox.Show("保存数据成功!");
this.Close();
}
catch
{
transaction.Rollback();
MessageBox.Show("保存数据出错!");
}
删除
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "sp_delete_material";
command.Parameters.Add(new SqlParameter("@id", id));
command.ExecuteNonQuery();
ExecuteScalar ()从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar ()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列。 executeScalar主要用于查询单行单列的值,如聚合函数(count,max,min,agv,sum)。
string sql = "select count(*) from wms_material where material_no='" + txtMaterialNo.Text + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
var ret = int.Parse(cmd.ExecuteScalar().ToString());
ExecuteReader用于实现只进只读的高效数据查询。 ExecuteReader:返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。
string sql = "select * from wms_material where mlfb like '%" + txtSearch.Text + "%'";
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(sql, connection);
SqlDataReader sr = cmd.ExecuteReader();
while (sr.Read())
{
ListViewItem item = new ListViewItem(sr["material_no"].ToString());
item.SubItems.Add(sr["mlfb"].ToString());
item.SubItems.Add(sr["repair_type"].ToString());
item.SubItems.Add(sr["location"].ToString());
item.SubItems.Add(sr["qty"].ToString());
item.SubItems.Add(sr["actual_qty"].ToString());
item.SubItems.Add(sr["description"].ToString());
lsvMain.Items.Add(item);
}
sr.Close();