创建本地数据库文件然后将应用程序连接到它的正确方法是什么?即使您更改了项目文件夹的位置,我也希望它能够工作。
正确知道我所做的是:项目 -> 添加新项目 -> 基于服务的数据库,然后创建一个,然后转到数据 -> 添加新数据源,添加创建的数据库并获取连接字符串。
好的,一切都很好,我可以按照我的意愿连接到它,但是当我关闭应用程序时(并非总是如此),我的所有数据都会从数据库中删除。
例如,这段代码:
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
文件 - 我几乎可以肯定您的数据在那里。
在我看来, 真正的解决方案 是
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/