更改不会永久保存到 SQL Server 精简版中

本文关键字:SQL Server 精简版 保存 | 更新日期: 2023-09-27 18:35:09

我遇到了一个奇怪的问题。我正在使用vs2012连接到SQL Server CE并执行一些插入查询。

public void EstablishConnection()
{
        connection = new SqlCeConnection("Data Source=DataDump.sdf;Persist Security Info=False;");
        try
        {
            connection.Open();
            Console.WriteLine("Connection Successful");
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.Message);
        }
    }
    public void AddRecord(string link,string content)
    {
        int num = 0;
        var command = new SqlCeCommand("INSERT INTO Webpages(Link,Data) VALUES('"+link+"','"+content+"');",connection);
        num = command.ExecuteNonQuery();
        Console.WriteLine("Command Successful rows affected"+num);
        var cmd2 = new SqlCeCommand("SELECT * FROM Webpages",connection);
        SqlCeDataReader reader = cmd2.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine(reader[0]);
            Console.WriteLine(reader[1]);   
        }
    }

但是我遇到了一个问题,一旦VS关闭,后来我打开它以显示数据,数据就消失了,因为它从未保存过

当它很清楚然后执行查询时,这怎么可能?

更改不会永久保存到 SQL Server 精简版中

这是一种常见的情况。
在项目项之间列出了数据库文件。
其属性Copy to Output directory设置为 Copy Always

现在,使用 VS 运行调试会话。编译成功,VS 将sdf文件从项目文件夹复制到当前输出目录 (BIN''DEBUG)。
代码运行顺畅,并将数据插入数据库文件(在输出目录上)。
停止并重新启动调试会话以修复某些内容,但在重新启动时,VS 会将空文件从项目文件夹重新复制到输出目录。

要打破此圆圈,请将Copy to Output Directory设置为 Copy Never(或Copy if Newer

编辑 混淆的另一个原因是使用服务器资源管理器查看数据库文件的内容。如果服务器资源管理器使用指向项目文件夹中的数据库文件的连接字符串,则永远不会在输出目录中看到对数据库文件所做的更改。
应在"服务器资源管理器"中创建两个连接,一个名为 DEBUG DataDump 的连接,指向 PROJECTFOLDER'BIN'DEBUG 。可以使用此连接检查调试期间插入的数据或其他调试任务。另一个称为 DISTRIBUTION DataDump ,指向项目文件夹中的文件,您可以在此处进行分发应用程序所需的架构更改。

话虽如此,请记住您的代码存在问题。它被称为SQL注入

参数化查询将避免引号问题并删除 Sql 注入

int num = 0;
var command = new SqlCeCommand("INSERT INTO Webpages(Link,Data) " + 
                               "VALUES(@lnk, @cnt)",connection);
command.Parameters.AddWithValue("@lnk", link);
command.Parameters.AddWithValue("@cnt", content);
num = command.ExecuteNonQuery();

"复制到输出目录"属性设置为"复制"(如果sdf 文件较新)

现在看来您已经将其设置为始终复制,结果是:

将数据库文件从项目目录复制到 bin 目录,每次生成应用程序时。所做的任何更改 到输出文件夹中的数据文件下次被覆盖 您运行应用程序。