执行命令
包含在 .NET Framework 中的每个 .NET Framework 数据提供程序都拥有自己的继承自 DbCommand 的命令对象。 适用于 OLE DB 的 .NET Framework 数据提供程序包括一个 OleDbCommand 对象,适用于 SQL Server 的 .NET Framework 数据提供程序包括一个 SqlCommand 对象,适用于 ODBC 的 .NET Framework 数据提供程序包括一个 OdbcCommand 对象,适用于 Oracle 的 .NET Framework 数据提供程序包括一个 OracleCommand 对象。 其中每个对象都根据命令的类型和所需的返回值公开用于执行命令的方法,如下表所述。
命令 | 返回值 |
---|---|
ExecuteReader |
返回一个 DataReader 对象。 |
ExecuteScalar |
返回一个标量值。 |
ExecuteNonQuery |
执行不返回任何行的命令。 |
ExecuteXMLReader |
返回 XmlReader。 只用于 SqlCommand 对象。 |
每个强类型命令对象还支持指定如何解释命令字符串的 CommandType 枚举,如下表所述。
CommandType | 描述 |
---|---|
Text |
定义要在数据源处执行的语句的 SQL 命令。 |
StoredProcedure |
存储过程的名称。 您可以使用某一命令的 Parameters 属性访问输入和输出参数,并返回值(无论调用哪种 Execute 方法)。 当使用 ExecuteReader 时,在关闭 DataReader 后才能访问返回值和输出参数。 |
TableDirect |
表的名称。 |
示例
下面的代码示例演示如何创建 SqlCommand 对象以通过设置其属性执行存储过程。 SqlParameter 对象用于指定存储过程的输入参数。 使用 ExecuteReader 方法执行此命令,并在控制台窗口中显示 SqlDataReader 的输出。
static void GetSalesByCategory(string connectionString,
string categoryName)
{
using (SqlConnection connection = new(connectionString))
{
// Create the command and set its properties.
SqlCommand command = new()
{
Connection = connection,
CommandText = "SalesByCategory",
CommandType = CommandType.StoredProcedure
};
// Add the input parameter and set its properties.
SqlParameter parameter = new()
{
ParameterName = "@CategoryName",
SqlDbType = SqlDbType.NVarChar,
Direction = ParameterDirection.Input,
Value = categoryName
};
// Add the parameter to the Parameters collection.
command.Parameters.Add(parameter);
// Open the connection and execute the reader.
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}: {1:C}", reader[0], reader[1]);
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
}
}
}
Shared Sub GetSalesByCategory(ByVal connectionString As String, _
ByVal categoryName As String)
Using connection As New SqlConnection(connectionString)
' Create the command and set its properties.
Dim command As SqlCommand = New SqlCommand()
command.Connection = connection
command.CommandText = "SalesByCategory"
command.CommandType = CommandType.StoredProcedure
' Add the input parameter and set its properties.
Dim parameter As New SqlParameter()
parameter.ParameterName = "@CategoryName"
parameter.SqlDbType = SqlDbType.NVarChar
parameter.Direction = ParameterDirection.Input
parameter.Value = categoryName
' Add the parameter to the Parameters collection.
command.Parameters.Add(parameter)
' Open the connection and execute the reader.
connection.Open()
Using reader As SqlDataReader = command.ExecuteReader()
If reader.HasRows Then
Do While reader.Read()
Console.WriteLine("{0}: {1:C}", _
reader(0), reader(1))
Loop
Else
Console.WriteLine("No rows returned.")
End If
End Using
End Using
End Sub
命令疑难解答
用于 SQL Server 的 .NET Framework 数据提供程序添加了性能计数器,使您能够检测与失败的命令执行相关的间歇性问题。 有关详细信息,请参阅性能计数器。