Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLDataAdapter正在更新,但它正在附加到数据库,而不是更新_C#_Wpf_Sql Server - Fatal编程技术网

C# SQLDataAdapter正在更新,但它正在附加到数据库,而不是更新

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;

我有一个一直在开发的应用程序,到目前为止,我一直使用Access作为数据库。我正在把它转换成SQL,我对它有点陌生

我的代码如下

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!