创建本地数据库文件然后将应用程序连接到它的正确方法是什么?即使您更改了项目文件夹的位置,我也希望它能够工作。

正确知道我所做的是:项目 -> 添加新项目 -> 基于服务的数据库,然后创建一个,然后转到数据 -> 添加新数据源,添加创建的数据库并获取连接字符串。

好的,一切都很好,我可以按照我的意愿连接到它,但是当我关闭应用程序时(并非总是如此),我的所有数据都会从数据库中删除。

例如,这段代码:

SqlConnection c = new SqlConnection(@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB.mdf;Integrated Security=True;User Instance=True");
c.Open();
SqlCommand cmd;
cmd = new SqlCommand("CREATE TABLE Persons (id int primary key, nume char(20), age int)");
cmd.ExecuteNonQuery();
cmd = new SqlCommand("INSERT INTO Persons VALUES (@id, @name, @age)", c);
cmd.Parameters.AddWithValue("@id", 1);
cmd.Parameters.AddWithValue("@name", "Catalin");
cmd.Parameters.AddWithValue("@age", 20);
cmd.ExecuteNonQuery();

我第一次运行它来创建表并向其中添加一个项目,然后如果我第二次运行它而没有 sqlcommand 来创建表人,它告诉我没有 Persons 对象,但是如果我运行第二次使用相同代码的项目时,它告诉我已经有一个 Persons 对象......

我正在使用 Visual C# 速成版 2010。

最佳答案

整个 User Instance 和 AttachDbFileName= 方法是有缺陷的 - 充其量!在 Visual Studio 中运行您的应用程序时,它将复制 .mdf 文件(从您的 App_Data 目录到输出目录 - 通常是 .\bin\debug - 您的应用程序运行的位置)和 很可能是 ,您的 INSERT 工作正常 - 但您只是看着 错误的.mdf 文件 到底!

如果您想坚持使用这种方法,请尝试在 myConnection.Close() 调用上放置一个断点 - 然后使用 SQL Server Mgmt Studio Express 检查 .mdf 文件 - 我几乎可以肯定您的数据在那里。

在我看来, 真正的解决方案

  • 安装 SQL Server Express(无论如何你已经完成了)
  • 安装 SQL Server Management Studio Express
  • SSMS Express 中创建您的数据库 ,给它一个逻辑名称(例如 MyDatabase )
  • 使用其逻辑 数据库名称 连接到它(在服务器上创建它时给出) - 并且不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:
    Data Source=.\\SQLEXPRESS;Database=MyDatabase;Integrated Security=True
    

    其他一切都是 与之前完全一样 ...

  • 另请参阅 Aaron Bertrand 的优秀博客文章 Bad habits to kick: using AttachDbFileName 了解更多背景信息。

    关于c# - 关闭应用程序时删除数据库中的所有数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36245933/

    10-12 13:50
    查看更多