如何将更改保存回数据库?

| 我的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,则在从数据库填充DataSet之后,您必须将这些更改传播回来以更新数据库。 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首先描述的问题相同的问题,即: 可以连接到数据库 可以从数据库检索所有记录(或子集) 似乎能够将更改写入数据库(甚至使用单独的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时,更改立即生效。     

要回复问题请先登录注册