2012-03-30 69 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