0

次のコードには問題があるようです。次のコード スニペットを使用してデータベースに値を挿入したいと考えています。

DataTable dtUsers = new DataTable("tblUsers");
BindingSource bsUsers = new BindingSource();
SqlDataAdapter daUsers = new SqlDataAdapter("usp_GetUsers", Properties.Resources.ConnectionString);


     daUsers.InsertCommand = new SqlCommand("usp_InsertNewUser");
                daUsers.InsertCommand.Connection = new SqlConnection(Properties.Resources.ConnectionString);
                daUsers.InsertCommand.CommandType = CommandType.StoredProcedure;
                daUsers.InsertCommand.Parameters.Clear();
                daUsers.InsertCommand.Parameters.Add("@username", SqlDbType.VarChar, 50).Value = txtUser.Text;
                daUsers.InsertCommand.Parameters.Add("@password", SqlDbType.VarChar, 50).Value = txtPass.Text;
                daUsers.InsertCommand.Parameters.Add("@userType", SqlDbType.Int).Value = cbxUserType.SelectedValue;
                daUsers.Update(dtUsers);

質問する前に、ストアド プロシージャは正常に動作しています。また、上記の InsertCommand を SelectCommand に変更して Fill メソッドを呼び出すと、すべて正常に動作します。Select/Fill コンボを使用している場合、データ アダプタの挿入/更新メソッドが正常に機能しないため、これはイライラさせられます。私もそれを監視したので、データ行は挿入されていません。また、例外も発生しません。アル

4

2 に答える 2

2

その正確なコード スニペットでは、何も挿入されません。SqlDataAdapter.Update() が機能する方法は、追加された RowState を持つ提供されたデータ テーブル (dtUsers) 内のすべての DataRow に対してであり、データ アダプターで定義された InsertCommand を呼び出します。 . 同様に、Modified の RowState を持つすべての DataRow に対して、定義されている UpdateCommand が呼び出されます (存在する場合)。

SqlDataAdapter.Update() の目的は、適切な定義済み sproc を呼び出す DataTable (新規、更新、および削除された行を含む可能性がある) を提供することです。

したがって、コードでは、dtUsers に RowState が追加されているものは何もないため、DB に送信する作業はありません。したがって、何も挿入されません。

于 2011-03-30T15:44:32.153 に答える