2011-06-25 64 views
2

我在我的c#項目中有一個數據庫,我有一個小問題。我可以從數據庫中讀取數據並顯示它,但是當我使用插入/更新/刪除等SQL查詢時,更改不會保存回數據庫文件,幾分鐘後它們就會消失...如何將更改保存回數據庫?

一個小的代碼示例:

DataSet ds = new DataSet(); 
string sql_string = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"; 
string sql = "INSERT INTO Table1 (name, time, needs, text) VALUES ('string', 'string', 'string', 'string')"; 
SqlConnection conn = new SqlConnection(sql_string); 
SqlCommand cmd = new SqlCommand(sql, conn); 
conn.Open(); 
SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
adapter.Fill(ds); ; 
cmd = new SqlCommand(sql, conn); 
cmd.ExecuteNonQuery();   
conn.Close(); 

現在我明白了,我需要使用SqlDataAdapter.update()來保存更改,但我不知道如何使用它?

+0

你確定你是發佈所有與此問題相關的代碼? – KMC

回答

0

看這個article它給出了一個很好的例子,說明如何使用SqlDataAdapter來選擇和更新數據。

4

如果您使用的DataSet,你從數據庫填充您的DataSet後,你必須對這些變化傳播回更新數據庫。 DataSet是存儲在內存中的運行時對象。

如果你只是執行一個SQL讚揚更新您的數據庫,那麼它的簡單(使用using statementParameters.Add,而不是直接將值SQL語句,以避免注射):

using (SqlCeConnection conn = new SqlCeConnection(connString)) 
{ 
    string sqlStr = @"INSERT INTO FooTable (FooName) VALUES (@FooName)"; 
    using (SqlCeCommand cmd = new SqlCeCommand(sqlStr, conn)) 
    { 
     try 
     { 
      conn.Open(); 
      cmd.Parameters.AddWithValue("@FooName", 'someString'); 

      cmd.ExecuteNonQuery(); 

      conn.Close(); 
     } 
     catch (SqlCeException se) 
     { 
      MessageBox.Show(se.ToString()); 
     } 
    } 
} 
+0

好的謝謝, 和所有的代碼... 但問題是,代碼運行良好,我關閉程序後,檢查數據庫的變化,我沒有看到任何 – guy

+0

@guy,你檢查你的數據庫在關閉程序之前進行更改(在運行期間)?如果是這樣,你是否改變你的DataSet並忘記將更改傳播回你的DataBase? – KMC

+0

我在運行時間和關閉程序後檢查... 並沒有改變... 但事情是,如果我再次運行程序(在上面的代碼運行後) 並要求progrem顯示來自數據庫的所有數據,我看到了上次運行時間的變化,即使這些變化沒有保存在數據庫中。 但如果我退出視覺工作室,並再次打開它並運行該程序,並要求它顯示數據庫中的所有數據 我沒有看到變化...像thire只是暫時的或某事。 有什麼想法? – guy

0

KMC的應該碼更新你的表格。

我能想到的唯一的事情就是在你的連接字符串中,你有 AttachDbFilename = | DataDirectory | \ Database.mdf;

但它看起來像連接到一個SQLExpress實例。嘗試從連接字符串中刪除這個。當調用ExecuteNonQuery時,更改將立即生效。

1

我正在挖掘這個問題,因爲沒有清楚地描述正確答案(如果您不同意,請閱讀整個主題):最接近正確的地方實際上來自jfuhr。

我都經歷了相同的問題,首先由OP所描述的,即:從DB

    • 可以連接到DB
    • 可檢索的所有記錄(或子集)出現能夠寫入對數據庫的更改(甚至使用單獨的datagridview控件從數據庫中檢索所有記錄,包括已添加/編輯的記錄以確認此操作)
    • 但是,更改不會傳播d以某種方式連接到數據庫 - 重新啓動整個IDE(或通過SQL Server Management Studio進行檢查)顯示新記錄尚未保存。

    在我的情況下,儘管使用經過驗證的代碼示例在其他地方完美運行,但仍出現此問題。

    的解決方案是從連接字符串中更改路徑:

    AttachDbFilename=|DataDirectory|...Database.mdf 
    

    的絕對路徑:

    AttachDbFilename=C:\\Users\\Me\\Projects\\MyProject\\MyDatabase.mdf 
    
  • 相關問題