SqlAdapter.Update()方法执行插入而不是更新

时间:2013-10-25 08:32:12

标签: c# sql-server datatable

我使用SqlAdapter.Update()方法更新表中的行。 为此,我创建了Datatable并将值添加到该数据表。

DataTable dtTable = new DataTable("Product");
SqlConnection myLocalConnection = new SqlConnection(_ConnectionString);
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter("Select * from " + dtTable.TableName, myLocalConnection);
SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(mySqlDataAdapter);

 mySqlDataAdapter.Update(dtTable);

当我使用此命令时,它会在数据库中插入新行,而不是更新现有行。为什么会这样?

2 个答案:

答案 0 :(得分:1)

这只是一个想法,而不是解决方案......

// update command to update database table. 
string strUpdateCommand =
"Update Students set Name = @Name, Gender = @Gender, Total = @Total where ID = @ID";
// create an instance of SqlCommand using the update command created above. 
SqlCommand updateCommand = new SqlCommand(strUpdateCommand, con);
// specify the paramaters of the update command. 
updateCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");
updateCommand.Parameters.Add("@Gender", SqlDbType.NVarChar, 20, "Gender");
updateCommand.Parameters.Add("@Total", SqlDbType.Int, 0, "Total");
updateCommand.Parameters.Add("@ID", SqlDbType.Int, 0, "ID");
// associate update command with SqlDataAdapter instance. 
dataAdapter.UpdateCommand = updateCommand;

答案 1 :(得分:1)

我认为这里发生的事情是(根据您给定的代码)您的dataadapter无法识别数据表中与您的数据表无关的行,因此猜测尝试通过dataadapter填充数据表然后修改您的数据表并更新它。

    DataTable dtTable = new DataTable();
    SqlConnection myLocalConnection = new SqlConnection(_ConnectionString);

    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter("Select * from " +   
    dtTable.TableName, myLocalConnection); 

    SqlCommandBuilder builder= new SqlCommandBuilder(mySqlDataAdapter);     
    mySqlDataAdapter.Fill(dtTable,"Products" ) 

     // Code to modify your datatable

    mySqlDataAdapter.UpdateCommand = builder.GetUpdateCommand();  

    mySqlDataAdapter.Update(dtTable);

- 希望它有所帮助。