执行命令 (ADO.NET)

包含在 .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 的输出。

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()
        Dim 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 Sub
static void GetSalesByCategory(string connectionString, 
    string categoryName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandText = "SalesByCategory";
        command.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        SqlParameter parameter = 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();
        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();
    }
}

命令疑难解答

用于 SQL Server 的 .NET Framework 数据提供程序添加了性能计数器,使您能够检测与失败的命令执行相关的间歇性问题。 有关更多信息,请参见性能计数器 (ADO.NET)

请参见

其他资源

命令和参数 (ADO.NET)

DataAdapter 和 DataReader (ADO.NET)

Working with DataReaders