C# SQLDataAdapter正在更新,但它正在附加到数据库,而不是更新
我有一个一直在开发的应用程序,到目前为止,我一直使用Access作为数据库。我正在把它转换成SQL,我对它有点陌生 我的代码如下C# SQLDataAdapter正在更新,但它正在附加到数据库,而不是更新,c#,wpf,sql-server,C#,Wpf,Sql Server,我有一个一直在开发的应用程序,到目前为止,我一直使用Access作为数据库。我正在把它转换成SQL,我对它有点陌生 我的代码如下 public bool Update_DB_FromTable(DataTable DTable) { try { SqlConnection myConnection = new SqlConnection("Data Source=" + hostname + " ;User ID=SALX; Password=password;
public bool Update_DB_FromTable(DataTable DTable)
{
try
{
SqlConnection myConnection = new SqlConnection("Data Source=" + hostname + " ;User ID=SALX; Password=password;" +
"database=" + dbname + "; " +
"connection timeout=30");
myConnection.Open();
SqlCommand myCommand = new SqlCommand("SELECT * FROM dbo." + tablename, myConnection);
SqlDataAdapter da = new SqlDataAdapter(myCommand);
SqlCommandBuilder b = new SqlCommandBuilder(da);
int count = da.Update(DTable);
myConnection.Close();
return true;
}
catch
{
return false;
}
}
这是可行的,但每次它运行时,它只会将数据附加到数据库的末尾,而不会像Access中那样“更新”数据库。最糟糕的是,它创建了许多重复条目,我无法从数据库中手动删除它们
任何帮助都将不胜感激
干杯
-肖恩-
这可能是一个真正的新手问题,但我被难住了。在“DTable”中的行决定了数据库中相应行的情况。如果“DTable”中的一行状态为“isNew”,则该行将被插入,如果状态为“modified”,则db表将被更新。在“DTable”中的行决定数据库中相应行的情况。如果“DTable”中的一行状态为“isNew”,则该行将被插入,如果状态为“modified”,则db表将被更新。能否在最初将数据输入数据表的位置发布代码?谢谢。起初我是从OleDbDataAdapter.Fill(来自MS Access的表)填充datatable,当我用该表更新sqlDataAdapter时,什么也没发生。因此,我实际地从该数据表构建了一个新的数据表并进行了更新。这就引出了它被插入的问题,每次它运行时,它只是将所有记录附加到底部。您能在最初将数据输入数据表的位置发布代码吗?谢谢。起初我是从OleDbDataAdapter.Fill(来自MS Access的表)填充datatable,当我用该表更新sqlDataAdapter时,什么也没发生。因此,我实际地从该数据表构建了一个新的数据表并进行了更新。这就引出了它被插入的问题,它每次运行时都会将所有记录追加到底部K3B是正确的。要使DataAdapter按预期工作,必须将该记录选择到datatable中,对其进行更新,然后DataAdapter将该记录识别为更新。除非调用DataRow.SetModified(),否则无法插入记录,因为数据表无法识别它正在更新中。这也可能产生同样的影响。但是你怎么知道什么时候应该修改或插入一行呢?嗯,也许我的方法是错误的,我从MS Access数据库中提取表,然后需要SQL表来反映。基本上,让本地access数据库与远程SQL数据库保持同步非常有意义。感谢k3b!k3b是对的。要使DataAdapter按预期工作,必须将该记录选择到datatable中,对其进行更新,然后DataAdapter将该记录识别为更新。除非调用DataRow.SetModified(),否则无法插入记录,因为数据表无法识别它正在更新中。这也可能产生同样的影响。但是你怎么知道什么时候应该修改或插入一行呢?嗯,也许我的方法是错误的,我从MS Access数据库中提取表,然后需要SQL表来反映。基本上,让本地access数据库与远程SQL数据库保持同步非常有意义。感谢k3b!