0

パラメータ化されたクエリを使用して SqlDataAdapter.Update(DataTable) メソッドを使用する方法を理解しようとする方法。DataTable 全体を反復せずにコマンドに値を追加するにはどうすればよいですか?

また、トランザクション内で SqlDataAdapter の挿入メソッドと更新メソッドを実行するにはどうすればよいですか?

私がこれまでに持っているものは次のとおりです。

internal void InsertUpdate(DataTable dt){
    using(var con = new SqlConnection(ConnectionString)){
         var sb = new StringBuilder();
         sb.AppendLine("UPDATE myTable");
         sb.AppendLine("SET prop1 = @p1, prop2 = qp2");
         sb.AppendLine("WHERE id = @id");
         var cmd = new SqlCommand(sb.ToString());
         cmd.Parameters.AddWithValue("p1", ????);
         cmd.Parameters.AddWithValue("p2", ????);
         cmd.Parameters.AddWithValue("id", ????);
         var adapter = new SqlDataAdapter(selectQuery, con);
         adapter.UpdateCommand = cmd;
         adapter.Update(dt);
    }
}

よろしくお願いします

ジェイ

4

1 に答える 1

1

Parameters.AddWithValue(...)を使用する代わりに、Parameters.Add(new SqlParameter(...))を使用し、ここでSqlParameterドキュメントの最後の3つのコンストラクターの1つを使用します:SqlParameterクラスMSDNドキュメント。これらを使用すると、実行時にパラメーターを入力するために使用される列を指定できます。たとえば、これが私の現在のプログラムの1つからの行です。

UpdateCommand.Parameters.Add(new OleDbParameter("FK_CustomerID", global::System.Data.OleDb.OleDbType.Integer, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "FK_CustomerID", global::System.Data.DataRowVersion.Current, false, null));

「FK_CustomerID」の2番目の使用に注意してください。これは、パラメーターにこのDataTable列を使用することを示します。

トランザクションの使用に関しては、いくつかのアイデアについてこれを見てください:怠惰な男のアプローチであるTableAdaptersを使用したトランザクション。よろしく、ドリュー

于 2011-08-27T01:03:09.277 に答える