2011-07-20 10 views
1

誰かが私のado.netコードをすこし見てみることができますか?私はデータセットから行を更新しようとしていますが、動作していません。私はコードの基本的な部分を欠いており、それはただ私を逃しているだけです。 DataRowが実際に正しいデータを持っていることを確認したので、行自体は正確です。ADO.NETの更新コードの問題

事前に感謝します。

try 
      { 
       //basic ado.net objects 
       SqlDataAdapter dbAdapter = null; 
       DataSet returnDS2 = new DataSet(); 

       //a new sql connection 
       SqlConnection myConn = new SqlConnection(); 
       myConn.ConnectionString = "Server=myserver.mydomain.com;" 
        + "Database=mydatabase;" 
        + "User ID=myuserid;" 
        + "Password=mypassword;" 
        + "Trusted_Connection=True;"; 

       //the sqlQuery 
       string sqlQuery = "select * from AVLUpdateMessages WHERE ID = 21"; 

       //another ado.net object for the command 
       SqlCommand cmd = new SqlCommand(); 
       cmd.Connection = myConn; 
       cmd.CommandText = sqlQuery; 

       //open the connection, execute the SQL statement and then close the connection. 
       myConn.Open(); 

       //instantiate and fill the sqldataadapter 
       dbAdapter = new SqlDataAdapter(cmd); 
       dbAdapter.Fill(returnDS2, @"AVLUpdateMessages"); 

       //loop through all of the rows; I have verified that the rows are correct and returns the correct data from the db 
       for (int i = 0; i <= returnDS2.Tables[0].Rows.Count - 1; i++) 
       { 
        DataRow row = returnDS2.Tables[0].Rows[i]; 
        row.BeginEdit(); 
        row["UpdatedText"] = @"This is a test..."; 
        row.EndEdit(); 
       } 

       //let's accept the changes 
       dbAdapter.Update(returnDS2, "AVLUpdateMessages"); 
       returnDS2.AcceptChanges(); 

       myConn.Close(); 

      } 
+2

dbAdapterに使用するUpdateコマンドまたはSQL文を設定するコードのどこにも表示されません。 – David

答えて

0

SqlCommandBuilderを使用して手助けをすることができます。 Fill呼び出しの後、次のステートメントを追加します。これは、コマンドビルダをデータアダプタに関連付け、使用可能なプライマリキーがある場合は、更新ステートメントを生成する必要があります。コマンドビルダーの背後にはいくらかの費用があることに注意してください。それは他のものに比べてあまり関係ないかもしれませんが、テーブルの主キー情報、フィールド名、フィールドタイプなどを取得するためのスキーマ情報を見て、INSERT、DELETE、およびUPDATEステートメントを生成します。テーブル。

SqlCommandBuilder cb = new SqlCommandBuilder(dbAdapter); 
+0

Boo ya!ありがとう!私はSqlCommandBuilderを持っていましたが、データにプライマリキーが指定されていませんでした。今それは素晴らしい作品です。ありがとう!!! – jdb1a1

+0

@JDB:クール。私はあなたがそれが働いてうれしいです。 –

1

データアダプタで更新クエリが必要だと思います。私は知っている、これは吸う...また、あなたは、CRUD操作のためのクエリを自動的に生成するためにCommandBuilderクラスを使用することができます。

例では:あなたが一度に一つを更新するために、テーブルのすべての行を選んでいる場合は

update AVLUpdateMessages set UpdatedText = 'This is a test...' where id = 21 

のようなもの、あなたはおそらくそれをやっているではない理由をhttp://www.programmersheaven.com/2/FAQ-ADONET-CommandBuilder-Prepare-Dataset

0

待ち、違う。 SQLはあなたの友人です。