C#不更新修改的数据集到SQL Server表

问题描述:

我一直在研究一个小项目,并且遇到了SQL Server数据库问题。连接并从中读取时,SQL Server数据库可以正常工作。当涉及到变量时没有问题,它们都可以更新。C#不更新修改的数据集到SQL Server表

但是,数据库本身根本不会更新。我相信这是错误的da.Update,但我从来没有使用过SQL,所以我找不到它有什么问题。

它应该做的:从SQL Server表

  • 读取数据
  • 放在一个DataTable
  • 采取从列表中的变化,并把它们放入DataTable
  • 添加的变化到数据库

它做什么:

  • 读取从SQL Server表
  • 把它放在一个DataTable
  • 从列表中注意到的变化,并把它们放入DataTable
  • 不更新数据库中的数据,但不会失败试图赶上

代码:

public void PushToDatabase() 
{ 
    // Get update from list 
    PropertiesList[0] = Name; 
    PropertiesList[1] = Token; 
    PropertiesList[2] = ClientID; 
    PropertiesList[3] = ClientInfo; 
    PropertiesList[4] = Owner; 
    PropertiesList[5] = OtherID; 
    PropertiesList[6] = Prefix; 
    PropertiesList[7] = ApiKey; 

    // Connect to the database 
    using (var connection = new SqlConnection(connectionString)) 
    using (SqlDataAdapter da = new SqlDataAdapter("SELECT ID, Name, Token, ClientID, ClientInfo, Owner, OtherID, Prefix, GoogleApi FROM dt", connection)) 
    { 
     SqlCommandBuilder cb = new SqlCommandBuilder(da); 

     connection.Open(); 

     DataTable dt = new DataTable(); 

     // Load then modify the data 
     da.Fill(dt); 
     dt.Rows[0].BeginEdit(); 
     dt.Rows[0][1] = PropertiesList[0]; 
     dt.Rows[0][2] = PropertiesList[1]; 
     dt.Rows[0][3] = PropertiesList[2]; 
     dt.Rows[0][4] = PropertiesList[3]; 
     dt.Rows[0][5] = PropertiesList[4]; 
     dt.Rows[0][6] = PropertiesList[5]; 
     dt.Rows[0][7] = PropertiesList[6]; 
     dt.Rows[0][8] = PropertiesList[7]; 
     dt.Rows[0].EndEdit(); 

     // Put the data back 
     try 
     { 
      da.AcceptChangesDuringUpdate = true; 
      da.DeleteCommand = cb.GetDeleteCommand(true); 
      da.UpdateCommand = cb.GetUpdateCommand(true); 
      da.InsertCommand = cb.GetInsertCommand(true); 
      dt.AcceptChanges(); 

      da.Update(dt); 

      MessageBox.Show("Properties Updated", "Update"); //this completes fine and displays the updated message 
     } 
     catch 
     { 
      MessageBox.Show("Cant Store data", "Error"); 
     } 

     connection.Close(); 
    } 
} 

对不起,我一直在添加的东西来解决这个问题,但我没有取得任何成功。

你不应该在更新之前调用AcceptChanges,所以你需要删除dt.AcceptChanges();

较长的答案是,将AcceptChanges的所有添加和更新的行标记为现在是未经修饰的,它会永久删除您要求删除的行(来自数据表 - 不是Sql Server中的表)。然后,当您调用Update时,它会扫描数据库以查找处于“已添加”,“已修改”或“已删除”状态的任何行,并且发现没有任何行(因为您只是通过AcceptChanges将它们全部更改为“未修改”),所以没有任何东西被发送到数据库。

+0

谢谢你的帮助,我已经删除了'dt.AcceptChanges();'。但是,我仍然遇到与未更新的表相同的问题。 – Cali

+0

da.Update(dt)返回什么? –

+0

好吧,它返回0 – Cali