SQL数据适配器插入命令

时间:2011-03-30 15:37:28

标签: c# sql-insert sqldatadapter

以下代码似乎存在问题我想使用以下代码段在数据库中插入一个值。

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方法,那么一切正常!这是令人沮丧的,因为如果您使用选择/填充组合,数据适配器的插入/更新方法不能正常工作。我也没有插入任何数据行。也没有生成异常。 人

2 个答案:

答案 0 :(得分:1)

使用确切的代码片段,不会插入任何内容 - SqlDataAdapter.Update()的工作方式适用于所提供的数据表(dtUsers)中具有RowState为Added的每个DataRow,它将调用已定义的InsertCommand数据适配器。同样,对于RowState为Modified的每个DataRow,它将调用已定义的UpdateCommand(如果有)。

SqlDataAdapter.Update()的目的是提供一个DataTable(可能包含新的,更新的和删除的行),它将为其调用适当的定义的sproc。

所以在你的代码中,你没有添加RowState的dtUsers,因此没有工作要发送到DB ....因此没有插入任何内容。

答案 1 :(得分:-1)

在设置params以提交插入数据库之后,您可以使用adapter.InsertCommand.ExecuteNonQuery()

例如:

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.InsertCommand.ExecuteNonQuery();
daUsers.Update(dtUsers);