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

C# 如何将更改保存回数据库?,c#,sql,database,C#,Sql,Database,我的c项目中有一个数据库,我有一个小问题。我可以从数据库中读取数据并显示出来,但是当我使用像insert/update/remove这样的SQL查询时,更改不会保存回数据库文件,几分钟后它们就消失了 下面是一个小代码示例: DataSet ds = new DataSet(); string sql_string = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Securi

我的c项目中有一个数据库,我有一个小问题。我可以从数据库中读取数据并显示出来,但是当我使用像insert/update/remove这样的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来保存更改,但我不知道如何使用它?

看看这个,它给出了一个关于如何使用SqlDataAdapter来选择和更新数据的好例子。

如果您使用的是数据集,在从数据库填充数据集之后,您必须传播这些更改以更新数据库。DataSet是存储在内存中的运行时对象

如果只是执行SQL语句来更新数据库,那么使用语句和参数就很简单了。添加而不是直接将值放入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());
        }
    }
}

KMC的代码应该更新您的表

我唯一能想到的是在你的连接字符串中 AttachDbFilename=| DataDirectory |\Database.mdf


但看起来您正在连接到一个SQLExpress实例。尝试从conn字符串中删除此和。调用ExecuteOnQuery时,更改是即时的。

我正在深入研究这个问题,因为正确的答案没有明确描述。如果您不同意,请阅读整个线程:最接近正确的是jfuhr

我遇到了与OP首次描述的问题相同的问题,即:

可以连接到数据库 可以从数据库中检索所有记录或子集 似乎能够将更改写入数据库,甚至可以使用单独的datagridview控件,该控件从数据库检索所有记录,包括为确认这一点而添加/编辑的记录 但是,这些更改并没有以某种方式传播到DB—重新启动整个IDE或通过SQLServerManagementStudio进行检查表明新记录尚未保存。 在我的例子中,尽管使用了在其他地方运行良好的经验证的代码示例,但还是出现了这个问题

解决方案是将连接字符串中的路径更改为:

AttachDbFilename=|DataDirectory|...Database.mdf
到绝对路径:

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

好的,谢谢,所有的代码都是。。。但问题是,代码运行良好,在我关闭程序并检查数据库中没有看到的更改之后any@guy,在运行时关闭程序之前,是否检查了数据库中的更改?如果是这样,您是否正在更改数据集并忘记将更改传播回数据库?我在运行时和关闭程序后进行了检查。。。没有任何变化。。。但问题是,如果我在运行上述代码后再次运行程序,并要求progrem显示数据库中的所有数据,我会看到上次运行时的更改,即使这些更改没有保存在数据库中。但是如果我退出VisualStudio并再次打开它并运行程序,并要求它显示数据库中的所有数据,我看不到这些更改…就像我只是暂时的或其他什么。有什么想法吗?伙计,我想我明白问题所在了。重新启动VS将清理您的项目。如果您转到Build>cleansolution并开始调试以再次编译您的项目,而不是重新启动VS,那么您应该也不会看到任何更改。如果发生这种情况,您不是在更改数据库,而是在更改数据集。您确定要发布所有代码吗?另外,如果您没有使用using-statement,请添加conn.Dispose。谢谢,如果这不是我更改数据库的方式,我该如何更改它?您确定发布了与您的问题相关的所有代码吗?