WinForms程序运行后SQL Server数据丢失问题求助
问题原因
你遇到的是LocalDB开发时的典型问题:VS在运行项目时,会把项目根目录里的Database1.mdf复制到输出目录(比如bin/Debug),你的程序实际操作的是这个副本文件。而服务器资源管理器默认连接的是项目根目录里的原MDF,所以看不到数据。另外,每次重启程序时,如果MDF文件的“复制到输出目录”属性设为“始终复制”,VS会用原文件覆盖输出目录的副本,导致之前插入的数据丢失,重启后可以重复插入同一ID。
解决方法
方法1:修改MDF文件的复制属性
- 在VS的解决方案资源管理器里找到
Database1.mdf文件 - 右键→属性,把复制到输出目录改成如果较新则复制或不复制
- 选“如果较新则复制”:只有原文件更新时才覆盖副本,保留副本里的数据
- 选“不复制”:完全用输出目录的副本,不再从原文件复制
方法2:修改连接字符串,直接连接数据库实例
避免依赖AttachDbFilename,改用数据库名连接,确保操作的是同一个数据库:
// 替换原来的连接字符串 string sqlCon = @"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=Database1;Integrated Security=True";
注意:需要先确保Database1已经附加到LocalDB实例里,可以通过服务器资源管理器完成附加操作。
方法3:确认服务器资源管理器连接的是正确的MDF
打开服务器资源管理器,检查连接的数据库路径是否是输出目录里的Database1.mdf(比如你的项目/bin/Debug/Database1.mdf),而不是项目根目录的原文件。
代码优化建议
你的代码里ID写死为3,建议改成动态输入或者自增列:
- 把
Contents表的Id设为自增主键(IDENTITY),这样插入时不用手动指定ID - 修改插入语句为:
INSERT INTO Contents ([File]) VALUES (@FileData)
这样避免手动指定ID导致的重复插入问题,也更符合数据库设计规范。
内容的提问来源于stack exchange,提问作者Tacotime
相关产品推荐
相关产品推荐

