C#运行程序修改数据后数据表不做更新【已解决】

在这里插入图片描述

前言

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

现象观察

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

问题思考

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

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

在这里插入图片描述

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

解决问题

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

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

在这里插入图片描述

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

在这里插入图片描述

  • 还有一点,有的同学可能会遇到下面这样的情况,如果你设置的属性值为【如果较新则复制】,此时在运行程序后就会出现如下的情况,出现正由另一进程使用,因此该进程无法访问此文件,然后项目被不断地重启,不过最多不会超过10次
  • 这就是因为你正在运行bin\DeBug目录下的【.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

在这里插入图片描述

  • 36
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 52
    评论
当处理大量数据时,程序的运行时间可能会很长。为了优化运行时间,可以采取以下措施: 1. 使用多线程:将数据写入 Excel 文件是一个 IO 操作,可以使用多线程来提高效率。将数据分成多个块,每个块由一个线程来处理,可以大大缩短运行时间。 2. 批量写入数据:将数据分批写入 Excel 文件,每次写入一定数量的数据,而不是每次写入一个数据。这样可以减少 IO 操作的次数,提高效率。 3. 关闭自动计算:Excel 文件中包含很多公式和函数,每次写入数据时都会自动计算,这会消耗大量的时间。可以在写入数据前关闭自动计算,写完数据后再开启自动计算。 4. 使用数组方式写入数据:使用数组方式写入数据可以提高效率。将数据先写入一个二维数组中,然后一次性将整个数组写入 Excel 文件中。 下面是一个示例代码,演示如何使用上述技巧优化程序的运行时间: ```csharp using System; using System.IO; using System.Threading.Tasks; using Microsoft.Office.Interop.Excel; namespace ExportToExcel { class Program { static void Main(string[] args) { // 创建 Excel 应用程序对象 Application excelApp = new Application(); // 创建一个新的 Excel 工作簿 Workbook workbook = excelApp.Workbooks.Add(); Worksheet worksheet = workbook.ActiveSheet; // 定义一个包含上万条数据的数组 int[] data = new int[10000]; for (int i = 0; i < data.Length; i++) { data[i] = i; } // 设置写入数据的起始行和列 int startRow = 1; int startCol = 1; // 关闭自动计算 excelApp.Calculation = XlCalculation.xlCalculationManual; // 分块写入数据 int chunkSize = 1000; int totalChunks = data.Length / chunkSize; Parallel.For(0, totalChunks, chunkIndex => { // 计算当前块的起始和结束索引 int startIndex = chunkIndex * chunkSize; int endIndex = Math.Min(startIndex + chunkSize, data.Length); // 创建一个二维数组,保存当前块的数据 object[,] values = new object[endIndex - startIndex, 1]; for (int i = startIndex; i < endIndex; i++) { values[i - startIndex, 0] = data[i]; } // 写入数据到 Excel 工作表中 Range range = worksheet.Range[worksheet.Cells[startRow + startIndex, startCol], worksheet.Cells[startRow + endIndex - 1, startCol]]; range.Value = values; }); // 开启自动计算 excelApp.Calculation = XlCalculation.xlCalculationAutomatic; // 保存 Excel 文件并关闭应用程序对象 string filePath = "data.xlsx"; workbook.SaveAs(filePath); excelApp.Quit(); Console.WriteLine("数据已保存至 " + Path.GetFullPath(filePath)); Console.ReadLine(); } } } ``` 在上面的代码中,我们使用了多线程和分块写入数据的方式,将数据分成了 10 个块,每个块包含 1000 条数据。关闭自动计算和使用数组方式写入数据也可以提高效率。你可以根据自己的需求修改代码,比如修改数据源、调整块大小等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烽起黎明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值