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

本文关键字:更新 插入 执行 Update 方法 SqlAdapter | 更新日期: 2023-09-27 18:36:47

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

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);

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

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

我认为

这里发生的事情是(根据你给出的代码)你的数据适配器无法识别你的数据表中的行,它与你的数据表无关,所以作为一个猜测,尝试通过数据适配器填充你的数据表,然后修改你的数据表并更新它。

    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);

-希望对您有所帮助。

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

// 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;