Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database vb.net同步数据库更新_Database_Vb.net - Fatal编程技术网

Database vb.net同步数据库更新

Database vb.net同步数据库更新,database,vb.net,Database,Vb.net,这是用visual basic编写的,在具有oledb连接的共享驱动器上使用.mdb数据库 假设我有一个包含以下两条记录的表: |ID |NAME |CITY | |2 |John Smith |Dallas | |15 |Bob Johnson |New York | 由于oledb将表复制到本地数据集,然后将其发送回db(data.tables(“Test”).Rows.Add),如果两个人试图同时在第三行插槽中添加新记录,是否会导致其

这是用visual basic编写的,在具有oledb连接的共享驱动器上使用.mdb数据库

假设我有一个包含以下两条记录的表:

    |ID |NAME        |CITY     |
    |2  |John Smith  |Dallas   |
    |15 |Bob Johnson |New York |
由于oledb将表复制到本地数据集,然后将其发送回db(
data.tables(“Test”).Rows.Add
),如果两个人试图同时在第三行插槽中添加新记录,是否会导致其中一条记录丢失?如果是这样的话,我该如何防止这种情况

旁注:无法编辑现有行,只能添加新行

解决方法:所以我按照建议做了,设置了一个测试程序来循环并尝试更新数据库100次,两次尝试之间没有缓冲时间。我让两台电脑同时运行它。当其中一个程序试图在同一秒更新时,它确实导致数据丢失,但它也产生了一个错误。最后,它很少发生,每次运行程序总共只产生大约3个错误


由于我的程序主要是小规模的,我无法看到为MySQL重写整个程序并将其安装在计算机上,因为我只希望数据库文件位于共享驱动器上。最后,如果出现错误,我可以在catch块中重新尝试更新,从而使它工作到没有数据丢失的位置。这不是一个大规模生产的解决方案,但对我来说效果相当不错。

首先,业内人士不使用Access是有原因的……简单地说,这是一个在维基百科上读到的狗屎数据库。

我的最佳选择是使用MSSQL,它使事情变得更容易信任我,即使是在网络上(只要您在承载DB的服务器的防火墙上添加一个例外)。如果你不想偏头痛,请使用MSSQL,然后返回给我们,告诉我们情况如何。设置与在VB中为Access db设置相同的数据库相当容易。
刚刚看到您找到了一个解决方案,希望这是一个持久的解决方案,您将在未来的项目中使用,不会出现问题。

为什么其中一条记录会丢失?他们两个都会被加上吗?它在连接上起作用,如果发生这种事情,为什么会有连接。您应该尝试运行两个版本的相同程序,循环中的循环会继续执行Add命令,并将两个循环上的计数器设置为1000,可能会将类似Thread.Sleep(5000)添加到两者中。。它们可能仍然不会同时运行。尝试将计数设置为1000000,这样可以使它们一起运行。最后检查是否有所有2000000条记录。我认为其中一条可能丢失的原因是oledb将数据库复制到本地数据表。更新时,它会将本地数据表发送回数据库。因此,如果两个人同时尝试更新,其中一个人显然会先更新,但第二个人基本上会覆盖第一个人。至少看起来是这样。你怎么知道整个数据表都被发送了?如果这与您发送给它的任何SQL库一样。。它只在您执行
SELECT
命令时发送给您,您的意思是它用数据库更新您计算机上的本地文件?这是
MS-Access
?是的,它是共享驱动器上的MS-Access数据库文件。当oledb连接打开时,它确实使用
SELECT
命令获取表并将其存储在数据集变量中。当您执行更新操作时,它接受dataset变量并将其发送到数据库文件以进行更新。