0

次のコードがあり、レコードをデータベースに更新していません。

 SqlDataAdapter da = new SqlDataAdapter("spInvent",cs);
 da.UpdateCommand.CommandType = System.Data.CommandType.StoredProcedure;
 da.UpdateCommand.Parameters.AddWithValue("@DisplayNo", displayNo);
 da.UpdateCommand.Parameters.AddWithValue("@Q", Q);
 da.UpdateCommand.ExecuteNonQuery();

 DataSet ds = new DataSet();

 da.Fill(ds);
 gvInfo.DataSource = ds;
 gvInfo.DataBind();

ここでエラーが発生します:

da.UpdateCommand.CommandType = System.Data.CommandType.StoredProcedure;
4

3 に答える 3

0

ここでいくつかのこと:

  1. 実際の を指定しませんUpdateCommand。のコンストラクターは、 をSqlDataAdapter設定しSelectCommandます。データの更新に使用する sproc を指定する必要があります。
  2. SelectCommandorを直接実行する必要はありませんUpdateCommand。DataAdapter を使用してDataSetor を呼び出すと、自動的に実行Update()されます (接続方法によっては、GridView がこれを実行する場合があります)。
于 2013-06-27T17:00:49.377 に答える
0

ここでの問題は、クエリを実行してからデータセットに入力するべきではないということだと思います。データセットに入力するだけでよいので、次のようになります。

SqlDataAdapter da = new SqlDataAdapter();
//updated to explicitly create update command object
SqlCommand update = new SqlCommand("spInvent",cs);
update.CommandType = System.Data.CommandType.StoredProcedure;
update.Parameters.AddWithValue("@DisplayNo", displayNo);
update.Parameters.AddWithValue("@Q", Q);
da.UpdateCommand = update;
//don't need this line:
//da.UpdateCommand.ExecuteNonQuery();

DataSet ds = new DataSet();

da.Fill(ds);
gvInfo.DataSource = ds;
gvInfo.DataBind();
于 2013-06-27T16:56:30.987 に答える