2012-03-30 77 views
0

我有一个应用程序,我一直在努力,直到现在我一直使用Access作为数据库。我将它切换到SQL,我有点新鲜。SQLDataAdapter正在更新,但它附加到数据库并没有更新

我的代码如下

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

这工作,但每次运行它只是将数据追加到数据库的结尾,并没有“更新”数据库就像访问。最糟糕的部分是因为它创造了许多重复的条目,我不能手动删除它们从数据库中..

任何帮助将不胜感激。

干杯,

-Sean-

这可能是一个真正的菜鸟问题,但我难倒..

+0

您可以将最初输入数据的代码发布到DataTable中吗?谢谢。 – ristonj 2012-03-30 15:21:40

+0

起初我从OleDbDataAdapter.Fill(MS Access的表格)填充数据表,当我更新sqlDataAdapter与该表没有任何事情发生。所以我从该DataTable中实际构建了一个新的DataTable并进行了更新。这给我带来了它被插入的问题,每次运行它只是将所有记录追加到底部 – 2012-03-30 16:23:48

回答

3

在“DTable”决定如何与相应的行中的数据库中发生的行。如果“DTable”中的某行的状态为“isNew”,则该行将被插入,如果状态为“已修改”,db-table将被更新。

+1

k3b是正确的。为使DataAdapter按照您的预期工作,您必须将记录选择到数据表中,然后更新它,然后dataadapter会将该记录识别为更新。除非调用DataRow.SetModified(),否则无法插入记录,因为数据表不能识别它处于更新中。这也可能产生同样的影响。但是,那么如何知道什么时候应该修改一行来插入? – Rich 2012-03-30 15:36:58

+0

hmmm所以也许我的做法是错误的,我从MS Access数据库拉表,然后需要SQL表反映。基本上试图保持本地访问数据库与远程SQL数据库同步 – 2012-03-30 16:27:41

+0

感谢k3b,现在变得非常有意义! – 2012-03-30 17:35:42