執行命令 (ADO.NET)
內含在 .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 物件。 |
每個強型別 (Strongly 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)。