Share via


執行命令 (ADO.NET)

更新: November 2007

內含在 .NET Framework 中的每個 .NET Framework 資料提供者本身都有命令物件,此物件是繼承自 DbCommand。.NET Framework Data Provider for OLE DB 包含 OleDbCommand 物件;.NET Framework Data Provider for SQL Server 包含 SqlCommand 物件;.NET Framework Data Provider for ODBC 包含 OdbcCommand 物件;而 .NET Framework Data Provider for Oracle 則包含 OracleCommand 物件。上述每種物件都會根據命令類型和想要的傳回值而公開 (Expose) 執行命令的方法,如下表所述。

命令

傳回值

ExecuteReader

傳回 DataReader 物件。

ExecuteScalar

傳回單一純量值。

ExecuteNonQuery

執行不會傳回任何資料列的命令。

ExecuteXMLReader

傳回 XmlReader。僅適用於 SqlCommand 物件。

每個強型別 (Srongly Typed) 的命令物件也會支援 CommandType 列舉型別 (Enumeration),此型別可指定解譯命令字串的方式。

CommandType

描述

Text

SQL 命令,可定義在資料來源執行的陳述式。

StoredProcedure

預存程序 (Stored Procedure) 的名稱。您可以使用命令的 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();
    }
}

疑難排解命令

.NET Framework Data Provider for SQL Server 加入一個效能計數器,可讓您偵測與失敗命令執行相關的週期性問題。如需詳細資訊,請參閱效能計數器 (ADO.NET)

請參閱

其他資源

命令和參數 (ADO.NET)

DataAdapter 和 DataReader (ADO.NET)

DataReader (ADO.NET)