解决C#运行程序修改数据后数据表不做更新的问题

2023年 8月 22日 29.6k 0

前言

近日,在使用C#连接数据库的时候,对数据库中的表做更新后,在当前启动项目中去显示表数据时虽然会发生一个更新,但是在结束程序运行后再去观察数据表中的记录时发现并没有发生一个变化,在重复尝试了好几次后还是同样的结果,于是就开始了我的查错之旅~

现象观察

现在的场景是对一个学生信息去做一个增删查改

  • 下面是原数据表Student中的记录

在这里插入图片描述

  • 然后我点击【增加】按钮后会弹出框让用户输入需要添加的学生信息

在这里插入图片描述

  • 当操作后再去点击【显示表数据】后,就可以发现当前数据表中已经多出了一条记录

在这里插入图片描述

  • 然后我在结束程序后去查看Student数据表的时候发现并数据表中的记录并没有做一个同步的更新,再想可能要手动刷新一下才行,于是点击了左上角的【刷新】后发现依旧是这幅模样,还是和之前一样的9条记录,这是为什么呢???我便感觉到很疑惑

在这里插入图片描述

想到可能是出了BUG吧,于是又开启程序进行操作~

  • 但是当我先点击【显示表数据】想要查看一下数据表中的信息时,却发现程序运行起来是做了更新的,但是数据表中却没有做更新,导致了两边不同步的情况,这就让我百思不得其解(・∀・(・∀・(・∀・*)

在这里插入图片描述

问题思考

于是我就开始思考🤔既然两边的数据都不一致的话,那么这会不会就是就是两张数据表呢👈

  • 经过我不断地搜寻资料、询问老师和同学、查看各种博客下,终于验证了我的猜测!!!
  • 这真的是两张不同的数据表,当我们去运行程序的时候,默认是在DeBug环境底下去进行的,所以我们连接到的是binDebug下的数据库文件,而不是项目根目录下的数据库文件

在这里插入图片描述

  • 也就是说我们在运行程序的时候,其实一直在更改binDebug文件下的数据库文件,所以在下一次运行起来后所查询的也是这个数据库,而根目录下的Database.mdf数据库文件却一直没有被动过,所以没更新是正常的

解决问题

接下去我们就来解决一下这个问题

  • 步骤很简单,只需要设置一下当前你工程下的.mdf结尾的数据库文件属性即可

在这里插入图片描述

  • 对于复制到输出目录这个属性的默认值为【始终复制】,我们将其改为【不复制】即可

在这里插入图片描述

  • 还有一点,有的同学可能会遇到下面这样的情况,如果你设置的属性值为【如果较新则复制】,此时在运行程序后就会出现如下的情况,出现正由另一进程使用,因此该进程无法访问此文件,然后项目被不断地重启,不过最多不会超过10次
  • 这就是因为你正在运行binDeBug目录下的【.mdf】数据库文件,此时发现两边的数据库信息不一致,编译器就会选择去做一个更新,那么机会和根目录下的【.mdf】文件冲突了,两个进程所使用的端口号是一直的, 这类似于我们在启动Tomcat服务器出现端口号占用的情况

在这里插入图片描述

  • 还有一点就是你一定要保证你的数据库连接字符串所寻找的数据库文件[Database1.mdf]是正确的
// 创建一个数据库连接字符串
string connectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\code\c-sharp\实验\实验4\学生成绩增删查改\学生成绩增删查改\Database1.mdf;Integrated Security=True";
  • 接下去我们再运行程序进行数据表的修改时就发现数据库中的学生表发生了同步的更新👈

在这里插入图片描述

好,到这里本文就结束了,希望能帮助到遇到困难的你 —— 2023.6.10

在这里插入图片描述

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论