为什么向数据库插入的数据仅在程序运行期间可见?
问题产生的核心原因按出现概率从高到低排列如下:
- Visual Studio 数据库文件复制策略问题(90%以上概率)
你项目中引入的.mdf数据库文件,默认的「复制到输出目录」属性为如果较新则复制或始终复制。程序运行时实际操作的是bin/Debug或bin/Release输出目录下的临时数据库副本,每次重新启动程序时,VS都会将项目根目录下的原始空白数据库文件覆盖到输出目录,所以运行时插入的数据在程序关闭后就会被清空。
你可以右键点击项目中的数据库文件,选择「属性」,将「复制到输出目录」修改为如果较新则复制(不需要覆盖的场景可以直接改成「不复制」,注意后续手动同步数据库结构)即可解决。 - 连接字符串指向不一致
检查你代码中ConfigurationManager读取的连接字符串,和playersTableAdapter使用的连接字符串是否指向同一个物理数据库文件,避免出现运行时写入的是临时库,你手动查看的是项目原始库的情况。 - 事务未提交(低概率)
你当前的插入代码没有显式开启事务,默认是自动提交状态,所以这个问题不存在,但如果你的项目全局配置了隐式事务未手动提交,也会出现数据写入后回滚的情况。 - SQL Server Express 用户实例模式问题
如果你的连接字符串启用了User Instance=True参数,SQL Server Express会为每次程序运行生成独立的临时用户实例,程序关闭后实例销毁,数据自然不会持久化。
注:你代码中插入语句使用ExecuteScalar()属于用法不规范,插入操作应该调用ExecuteNonQuery(),但这个不影响数据写入的结果,不是本次问题的诱因。
内容的提问来源于stack exchange,提问作者Shiraq
相关产品推荐
相关产品推荐

