SqlCommandBuilder 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
自動產生單一資料表命令,以用來讓對 DataSet 進行的變更與相關聯的 SQL Server 資料庫一致。 此類別無法獲得繼承。
public ref class SqlCommandBuilder sealed : System::Data::Common::DbCommandBuilder
public sealed class SqlCommandBuilder : System.Data.Common.DbCommandBuilder
type SqlCommandBuilder = class
inherit DbCommandBuilder
Public NotInheritable Class SqlCommandBuilder
Inherits DbCommandBuilder
- 繼承
-
SqlCommandBuilder
範例
下列範例會 SqlCommandSqlDataAdapter 使用 和 SqlConnection ,從資料來源中選取資料列。 此範例會傳遞連接字串、Transact-SQL SELECT 語句的查詢字串,以及資料庫資料表名稱的字串。 然後,此範例會建立 SqlCommandBuilder 。
using System;
using System.Data;
using Microsoft.Data.SqlClient;
namespace SqlCommandBuilderCS
{
class Program
{
static void Main()
{
string cnnst = "";
string queryst = "";
string tablen = "";
DataSet ds = SelectSqlRows(cnnst, queryst, tablen);
}
public static DataSet SelectSqlRows(string connectionString,
string queryString, string tableName)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
connection.Open();
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, tableName);
//code to modify data in DataSet here
builder.GetUpdateCommand();
//Without the SqlCommandBuilder this line would fail
adapter.Update(dataSet, tableName);
return dataSet;
}
}
備註
SqlDataAdapter不會自動產生與相關聯實例SQL Server的變更 DataSet 協調所需的 Transact-SQL 語句。 不過,如果您設定 SelectCommand 的 屬性,您可以建立 物件來自動產生單一 SqlCommandBuilder 資料表更新的 SqlDataAdapter Transact-SQL 語句。 然後,您未設定的任何其他 Transact-SQL 語句都會由 SqlCommandBuilder 產生。
會在 SqlCommandBuilder 您設定 DataAdapter 屬性時,將本身註冊為事件的接聽程式 RowUpdating 。 您一次只能將一個 SqlDataAdapter 或 SqlCommandBuilder 物件與彼此產生關聯。
若要產生 INSERT、UPDATE 或 DELETE 子句,會 SqlCommandBuilder 使用 SelectCommand 屬性自動擷取一組必要的中繼資料。 如果您在擷取中繼資料之後變更 SelectCommand ,例如在第一次更新之後,您應該呼叫 RefreshSchema 方法來更新中繼資料。
SelectCommand
還必須傳回至少一個主索引鍵或唯一的資料行。 如果沒有,則會產生 InvalidOperation 例外狀況 ,而且不會產生命令。
SqlCommandBuilder也會使用 所參考的 ConnectionSelectCommand 、 CommandTimeout 和 Transaction 屬性。 如果修改了其中一或多個屬性,或 SelectCommand 已取代本身,則使用者應該呼叫 RefreshSchema 。 否則 InsertCommand , UpdateCommand 和 DeleteCommand 屬性會保留其先前的值。
如果您呼叫 Dispose ,則會 SqlCommandBuilder 與 SqlDataAdapter 解除關聯,而且不再使用產生的命令。
建構函式
SqlCommandBuilder() |
初始化 SqlCommandBuilder 類別的新執行個體。 |
SqlCommandBuilder(SqlDataAdapter) |
使用關聯的 SqlCommandBuilder 物件來初始化 SqlDataAdapter 類別的新執行個體。 |
屬性
CatalogLocation |
設定或取得 CatalogLocation 類別之執行個體的 SqlCommandBuilder。 |
CatalogSeparator |
設定或取得用做 SqlCommandBuilder 類別執行個體之目錄分隔符號的字串。 |
DataAdapter |
取得或設定會自動產生 Transact-SQL 陳述式的 SqlDataAdapter 物件。 |
QuotePrefix |
取得或設定一或多個開始字元,當指定其名稱包含空格或保留語彙基元 (Token) 之類字元的 SQL Server 資料庫物件 (例如資料表或資料行) 時,就可以使用。 |
QuoteSuffix |
取得或設定一或多個結束字元,當指定其名稱包含空格或語彙基元之類字元的 SQL Server 資料庫物件 (例如資料表或資料行) 時,就可以使用。 |
SchemaSeparator |
取得或設定用於結構描述識別項和任何其他識別項間之分隔符號的字元。 |
方法
DeriveParameters(SqlCommand) |
從 SqlCommand 中指定的預存程序 (Stored Procedure) 擷取參數資訊,並填入 (Populate) 指定 Parameters 物件的 SqlCommand 集合。 |
GetDeleteCommand() |
取得在資料庫上執行刪除時所需之自動產生的 SqlCommand 物件。 |
GetDeleteCommand(Boolean) |
取得在資料庫上執行刪除時所需之自動產生的 SqlCommand 物件。 |
GetInsertCommand() |
取得在資料庫上執行插入時所需之自動產生的 SqlCommand 物件。 |
GetInsertCommand(Boolean) |
取得在資料庫上執行插入時所需之自動產生的 SqlCommand 物件。 |
GetUpdateCommand() |
取得在資料庫上執行更新時所需之自動產生的 SqlCommand 物件。 |
GetUpdateCommand(Boolean) |
取得在資料庫上執行更新時所需之自動產生的 SqlCommand 物件。 |
QuoteIdentifier(String) |
自動產生單一資料表命令,以用來讓對 DataSet 進行的變更與相關聯的 SQL Server 資料庫一致。 此類別無法獲得繼承。 |
UnquoteIdentifier(String) |
在有提供引號識別項時,會傳回該識別項不具引號的正確格式。 這包括正確包含識別項中的任何內嵌引號。 |