簡體   English   中英

如何將更改保存回數據庫?

[英]How do I save changes back to the database?

我的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()保存更改,但是我不知道如何使用它?

如果您使用的數據集 ,填充從數據庫數據集中后,你必須對這些變化傳播回更新數據庫。 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());
        }
    }
}

我正在研究這個問題,因為沒有明確描述正確的答案(如果您不同意,請閱讀整個主題):最接近正確的實際上是jfuhr。

我遇到了與OP首先描述的問題相同的問題,即:

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

就我而言,盡管使用了在其他地方都能正常使用的經過驗證的代碼示例,但還是出現了此問題。

解決方案是將連接字符串中的路徑從以下位置更改:

AttachDbFilename=|DataDirectory|...Database.mdf

到絕對路徑:

AttachDbFilename=C:\\Users\\Me\\Projects\\MyProject\\MyDatabase.mdf

看一下本文,它為如何使用SqlDataAdapter選擇和更新數據提供了一個很好的例子。

KMC的代碼應更新您的表。

我唯一能想到的是,在您的連接字符串中,您具有AttachDbFilename = | DataDirectory | \\ Database.mdf;。

但是看起來您正在連接到SQLExpress實例。 嘗試從conn字符串中刪除它。 調用ExecuteNonQuery時,更改立即生效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM