.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 物件。 這些物件都會根據命令的類型和所需的傳回值來公開執行命令的方法,如下表所述。
| 指令 | 傳回值 |
|---|---|
ExecuteReader |
傳回 DataReader 物件。 |
ExecuteScalar |
傳回單一純量值。 |
ExecuteNonQuery |
執行不會傳回任何數據列的命令。 |
ExecuteXMLReader |
傳回 XmlReader。 僅適用於 SqlCommand 物件。 |
每個強類型命令物件也支援 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($"{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
疑難排解指令
.NET Framework Data Provider for SQL Server 會新增性能計數器,讓您偵測與命令執行失敗相關的間歇性問題。 如需詳細資訊,請參閱 性能計數器。