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将它们全部更改为“未修改”),所以没有任何东西被发送到数据库。
谢谢你的帮助,我已经删除了'dt.AcceptChanges();'。但是,我仍然遇到与未更新的表相同的问题。 – Cali
da.Update(dt)返回什么? –
好吧,它返回0 – Cali