[英]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 statement
和Parameters.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首先描述的問題相同的問題,即:
就我而言,盡管使用了在其他地方都能正常使用的經過驗證的代碼示例,但還是出現了此問題。
解決方案是將連接字符串中的路徑從以下位置更改:
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.