- PR -

C#とADO.NETのデータUpdateについて

1
投稿者投稿内容
hirohiro
会議室デビュー日: 2002/12/25
投稿数: 7
投稿日時: 2003-01-16 11:24
C#,ASP.NET,ADO.NETを使用して、SQLサーバーにあるテーブルの値を更新したいのですが出来ずに悩んでいます。

//sqlUpdateCommand1
this.sqlUpdateCommand1.CommandText = "UPDATE shodan_step SET 列2= @列2,
  列3 = @列3, 列4 = @列4 WHERE (列1 = @列1)";
this.sqlUpdateCommand1.Connection = this.sqlConnection1;
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ 列2", System.Data.SqlDbType.VarChar, 32, "列2"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ 列3", System.Data.SqlDbType.VarChar, 32, "列3"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ 列4", System.Data.SqlDbType.VarChar, 64, "列4"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@列1", System.Data.SqlDbType.BigInt, 8, System.Data.ParameterDirection.Input,   false, ((System.Byte)(0)), ((System.Byte)(0)), "列1",              System.Data.DataRowVersion.Original, null));


public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
 {
  sqlUpdateCommand1.Parameters["@列1"].Value
   =DataGrid1.DataKeys[(int)e.Item.ItemIndex];
  String[] cols ={"@列1","@列2","@列3","@列4"};

  int numCols = e.Item.Cells.Count;
  for (int i=0; i<numCols-1; i++)
  {
   String colvalue =((TextBox)e.Item.Cells[i].Controls[0]).Text;
   sqlUpdateCommand1.Parameters[cols[i+1]].Value = colvalue;
   Response.Write(colvalue);
  }
   sqlUpdateCommand1.Connection.Open();
   sqlUpdateCommand1.ExecuteNonQuery();
   sqlUpdateCommand1.Connection.Close();
  }

データグリッドのボタン列を使用してUpdateしたいのですが、上記のソースだと、ボタン列の編集ボタンをクリックしてテキストボックスを表示させ、そのテキストボックスの中身を編集して、更新ボタンを押しても値がUpdateされていないのです。試しに
『Response.Write(colvalue);』で値を表示させたのですが、Update以前の値が表示されるだけです。
どこか、間違いがあれば教えて欲しいのですが。。よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-01-16 11:34
 SqlCommandで更新するのではなく、そのSqlCommandをSqlAdapterのUpdateCommandに(DeleteCommandとInsertCommandも別途作成して)設定し、SqlAdapter.Updateメソッドを呼び出します。
#1行だけ更新されていません?
hirohiro
会議室デビュー日: 2002/12/25
投稿数: 7
投稿日時: 2003-01-16 12:04
返信ありがとうございます。

ご指摘のあった内容ですが、ソースが長くなる為、途中を省略していました。
『this.sqlDataAdapter1.UpdateCommand = this.sqlUpdateCommand1;』
上記のようにして、SqlAdapterのUpdateCommandに設定しています。
(DeleteCommandとInsertCommandも別途作成しています。)
ここが、違うのでしょうか?
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-01-17 08:40
引用:

hirohiroさんの書き込み (2003-01-16 12:04) より:

ご指摘のあった内容ですが、ソースが長くなる為、途中を省略していました。
『this.sqlDataAdapter1.UpdateCommand = this.sqlUpdateCommand1;』
上記のようにして、SqlAdapterのUpdateCommandに設定しています。
(DeleteCommandとInsertCommandも別途作成しています。)


 それでは、
>> sqlUpdateCommand1.Connection.Open();
>> sqlUpdateCommand1.ExecuteNonQuery();
>> sqlUpdateCommand1.Connection.Close();
は、なんですか?ここを見てレス付けしたのですが?

 ルートポストの上半分の内容でUpdateCommandを作成し、同様にInsertCommand、DeleteCommandも作成している。MyDataGrid_Updateメソッドでは、SqlAdapterのそれぞれのメンバにSqlCommandを設定し、SqlAdapter.Updateメソッドを呼び出しているにもかかわらず、更新されない。・・・ということでしょうか。
 SqlAdapterに更新直前(SQL文を発行する直前)に発生するイベントがあります。そのイベントハンドラを記述し、Debug.Writeで確認してみてはいかがでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)