[英]The changes made in mysql database dosent reflect in the vb.net application
我是vb和mysql的初学者...我正在一个项目(vb 2010 express和mysql5.1)中,局域网中有两台计算机。 该应用程序已安装在两台计算机上,并且数据库位于其中一台计算机上。 两者都使用同一用户(dr_admin)连接到数据库。 我的问题是,在一台计算机上所做的更改不会反映在另一台计算机上。
DBCon = New ADODB.Connection
DBCon.ConnectionString = ("Driver={MySQL ODBC 3.51 Driver};Server=Admin-PC; Database=dr_db; User=dr_admin;Password=dradmin;pooling=false;Option=3;")
DBCon.Open()
MsgBox(DBCon.State)
Try
Cmd = New ADODB.Command
Cmd.ActiveConnection = DBCon
Cmd.CommandText = "SEt autocommit=0;"
Cmd.Execute()
这是我连接的方式,并且在需要时手动进行提交和回滚。
我从数据库中填充一个列表。 该列表显示在面板上。 每次在面板上可见时都会加载数据。 但是不会显示新数据。 然后,我添加了一些代码以关闭当前的数据库连接,然后再次重新打开。
Public Sub reconnect_pr()
DBCon.Close()
MsgBox(DBCon.State)
DBCon = Nothing
DBCon = New ADODB.Connection
DBCon.ConnectionString = ("Driver={MySQL ODBC 3.51 Driver};Server=Admin-PC;Database=dr_db; User=dr_admin;Password=dradmin;pooling=false;Option=3;")
DBCon.Open()
MsgBox(DBCon.State)
Try
Cmd = New ADODB.Command
Cmd.ActiveConnection = DBCon
Cmd.CommandText = "SEt autocommit=0;"
Cmd.Execute()
Catch ex As Exception
MsgBox("autocommit error - Contact admin", MsgBoxStyle.OkOnly, "Patient Care")
End Try
End Sub
这是我用来从db检索数据的代码。
Cmd = New ADODB.Command
Cmd.ActiveConnection = login_frm.DBCon
Cmd.CommandText = "select pat_no,pat_id,pat_name from pat_token_details order by pat_no;"
Rs = Cmd.Execute
exp_tod_pat_list.Items.Clear()
exp_tod_pat_list.Items.Add("None")
Do While Not Rs.EOF
v_token = Rs("pat_no").Value
v_pat_name = Rs("pat_name").Value
v_id = Rs("pat_id").Value
exp_tod_pat_list.Items.Add("Token id: " + v_token + " - " + v_pat_name + " ( " + v_id + " )")
Rs.MoveNext()
Loop
Catch ex As Exception
MsgBox("unable to fetch current token details", MsgBoxStyle.OkOnly, "Token")
End Try
仍然无法正常工作。但是当我关闭应用程序并再次打开它时,它就会反映出来。
请帮助我理解问题。
谢谢。
对这种行为原因的简短说明:
在MySql中,默认隔离级别为REPEATABLE READ。
在这种模式下(有关详细信息,请参见此链接: 单击我 ):
同一事务中的所有一致读取均读取由第一次读取建立的快照。 此约定意味着,如果您在同一事务中发出多个普通(非锁定)SELECT语句,则这些SELECT语句彼此之间也是一致的。
用简单的话来说:如果在同一事务内多次发出同一SELECT语句,则无论其他会话对数据库进行的更改如何,您将始终获得相同的结果 。
会话记住,事务中的第一个SELECT在X时刻运行,并在X时刻“创建数据快照”,然后所有后续选择将在X时刻读取此快照,但不是当前数据。
请参阅下一个链接:( 单击我 ):
如果事务隔离级别为REPEATABLE READ(默认级别),则同一事务中的所有一致读取将读取该事务中第一个此类读取所建立的快照。 您可以通过提交当前事务并在此之后发出新查询来获取查询的更新 快照 。
通过提交事务(或发布事务回滚),您可以结束该事务,并且下一个SELECT(在新事务中)将看到新数据。
如果启用了auto_commit,则所有选择都会始终自动提交-因此您始终会看到新数据。
但是,如果禁用可重复读取(默认)等值层级别的自动提交,则必须手动提交才能查看数据库中的更改。
注意:以上行为仅适用于InnoDb表。 其他引擎不支持ACID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.