語言
每個 ADO.NET 資料提供者都有其自己的指令物件,繼承自 DbCommand。 .NET Framework Data Provider for OLE DB 包含一個OleDbCommand物件,Microsoft.Data.SqlClient 包含一個SqlCommand物件,.NET Framework Data Provider for ODBC 包含一個OdbcCommand物件,而 Oracle 的 .NET Framework Data Provider 則包含一個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
疑難排解指令
Microsoft.Data.SqlClient 在 .NET Framework 上公開 Windows 效能計數器,並在現代 .NET 上提供 EventCounters。 如需相關資訊,請參閱 Performance Counters。