语言

执行命令

每个 ADO.NET数据提供程序都有自己的继承自DbCommand的命令对象。 OLE DB 的 .NET Framework Data Provider 包括一个OleDbCommand对象,Microsoft.Data.SqlClient 包括一个SqlCommand对象,ODBC 的 .NET Framework Data Provider包括一个OdbcCommand对象,以及 Oracle 的 .NET Framework Data Provider包含一个OracleCommand对象。 每个对象都公开了基于命令类型和所需返回值执行命令的方法,如下表所述。

指令 返回值
ExecuteReader 返回 DataReader 对象。
ExecuteScalar 返回一个标量值。
ExecuteNonQuery 执行不返回任何行的命令。
ExecuteXMLReader 返回 XmlReader。 只用于 SqlCommand 对象。

每个强类型命令对象还支持用于指定命令字符串解释方式的CommandType枚举,如下表所述。

命令类型 DESCRIPTION
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($"{reader[0]}: {reader[1]:C}");
                }
            }
            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

故障排除命令

Microsoft.Data.SqlClient 在 .NET Framework 上公开 Windows 性能计数器,并在现代 .NET 上公开 EventCounters。 有关详细信息,请参阅 性能计时器。

另请参阅