2009-06-24 24 views
0

おそらくばかげた質問を申し訳ありません。私はインターネット上でそれについて何も見つけ出していないので、おそらく完全に明白で、私は見ることができません。DataAdapter更新メソッド - どの接続を使用しますか?

私はDataAdapter.Update(データセット)

しかし、接続を設定するには何のpossiblityはありません経由してデータセットから、データベース内のテーブルを更新しようとしている、DAが使用する必要があります。

DAはどのようにDBに接続するのか知っていますか?あるいは、私はデータアダプターの概念を誤解していますか?

私の現在のコードは次のようである:私はちょうどこれを書いて、それが動作する(場合は)...私は今のところそれをテストhaventはどのように不審になった

protected DataSet UpdateDataSet(DataSet ds) 
{ 
    DataSet dsChanges = new DataSet(); 
    SqlDataAdapter da = new SqlDataAdapter(); 

    dsChanges = ds.GetChanges(); 

    //Update DataSet 
    da.Update(dsChanges); 

    ds.Merge(dsChanges); 
    return ds; 
} 

、私は私の前にいくつかの他のコードを記述しなきゃので、それを正しくテストすることができます

ありがとうppl、StackOVerflow FTW!

+0

あなたはその後、別で上書きされている空白のデータセット(dsChanges)をインスタンス化しています。これを初期化しないでください。 – cjk

+0

このヒントありがとう!これはより良い(?)でしょう: DataSet dsChanges = ds.GetChanges(); –

答えて

5

SqlDataAdapterは、SqlConnectionオブジェクトが関連付けられたSqlCommandオブジェクトを取り込む必要があります。それは、階層がどのように崩壊するかです。 あなたがそれをやって行く方法については

、コンストラクタに渡すだけでなく、建設後の様々なプロパティを設定するためのオプションがあります。

msdn articleには、選択、挿入、更新、削除の例があります。

FTA:

public static SqlDataAdapter CreateCustomerAdapter(
    SqlConnection connection) 
{ 
    SqlDataAdapter adapter = new SqlDataAdapter(); 

    // Create the SelectCommand. 
    SqlCommand command = new SqlCommand("SELECT * FROM Customers " + 
     "WHERE Country = @Country AND City = @City", connection); 

    // Add the parameters for the SelectCommand. 
    command.Parameters.Add("@Country", SqlDbType.NVarChar, 15); 
    command.Parameters.Add("@City", SqlDbType.NVarChar, 15); 

    adapter.SelectCommand = command; 

    // Create the InsertCommand. 
    command = new SqlCommand(
     "INSERT INTO Customers (CustomerID, CompanyName) " + 
     "VALUES (@CustomerID, @CompanyName)", connection); 

    // Add the parameters for the InsertCommand. 
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 
     40, "CompanyName"); 

    adapter.InsertCommand = command; 

    // Create the UpdateCommand. 
    command = new SqlCommand(
     "UPDATE Customers SET CustomerID = @CustomerID, " + 
     "CompanyName = @CompanyName " + 
     "WHERE CustomerID = @oldCustomerID", connection); 

    // Add the parameters for the UpdateCommand. 
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 
     40, "CompanyName"); 
    SqlParameter parameter = command.Parameters.Add(
     "@oldCustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    parameter.SourceVersion = DataRowVersion.Original; 

    adapter.UpdateCommand = command; 

    // Create the DeleteCommand. 
    command = new SqlCommand(
     "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection); 

    // Add the parameters for the DeleteCommand. 
    parameter = command.Parameters.Add(
     "@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    parameter.SourceVersion = DataRowVersion.Original; 

    adapter.DeleteCommand = command; 

    return adapter; 
} 
+0

これは、データを取得しようとするときに行うことです。私はコマンドオブジェクトを渡す。しかし、DataAdapterの更新メソッドは、DataSet(およびその他のものだがコマンドオブジェクトは使用できません) –

+2

@ MAD9 SqlDataAdapterには、SqlCommandオブジェクトでニーズに合わせて割り当てることができるUpdateCommandプロパティもあります。これはまた、挿入と削除にも役立ちます。 – Joseph

+0

よろしくお願い致します。問題は、明示的にSQL文字列を持っていないので、コマンドオブジェクトをどこから取得すべきかわからないということでした。 –

関連する問題