使用access会发生这么个问题

alicc 2007-04-07 04:19:31
首先是我所作的B/S软件需要多种数据库的支持,其中就包括Access数据库。而为了达到快的速度,必须把access的连接放入数据库连接池,所以我专门给access做了个数据库连接池。

问题出现了:“就是用access连接池的时候,有的时候会出现修改过的数据不能及时的反应到界面上来。”

刚开始我以为是我的access连接池写的有问题,于是是大找特找就是找不到原因,后来我干脆不用池,直接自己new一个全局连接放在静态变量里看一下会不会有问题,结果显示完全没有问题。

接着我又new 了两个连接放在静态变量里 conn1 和 conn2 , 然后让conn1做了一个update数据操作,conn2又立马获取update的值,结果显示 获取的数据还是update前的数据, 然后过3到5秒 再让conn2去获取update的值 才能看到已经修改了。

于是我得出这样的结论,access数据库的多个连接情况下,其中某一个连接进行了修改操作需要过3到4秒才能反映到其他连接里来

如果这个结论被确定那就是说 access无法实现 传统上的 数据库连接池。

于是我想会不会是我的数据库操作代码有问题,于是我干脆用两台电脑做测试,分别在两台电脑上用office打开同一个access数据库,然后在其中一台上修改了某个数据,另外一台上立马打开改数据,结果显示 数据还是没有更新。 靠。从目前来看我上面的结论是符合实际的。

如果真的这个结论被坐实的话,就像我上面说的,“access无法实现 传统上的 数据库连接池”。那麻烦就大了,因为其他数据库连接池,如:sqlserver,是可以用的,而access不能用,那么可能需要更多的代码区分开来编写。

于是我又想,会不会是使用access连接的时候有没有什么特殊的属性(或者说方式),才能保证多个access连接能及时的反应信息。

哪位达人看到这个问题,如果能解决的给小子回复一下。

qq:54825898
email:chaxcha@gmail.com
...全文
155 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
alicc 2007-04-08
  • 打赏
  • 举报
回复
ls的,你这样也是和上面一样

这里我要说明一点,及时ls的代码显示结果是正确的,那只能说明conn要关闭才能放映数据,也就是和我说的数据库连接池背道而驰了。。。
wszhoho 2007-04-07
  • 打赏
  • 举报
回复
protected void LinkButton11_Click(object sender, EventArgs e)
{
String connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/test.mdb") + ";Persist Security Info=True;";
String selectSql = "select [num] from [test] where [id]=1";
String updateSql = "Update [test] set [num]=[num]+1 where [id]=1";


OleDbConnection connForUpdate = new OleDbConnection(connStr);
OleDbConnection connForSelect = new OleDbConnection(connStr);

OleDbCommand cmd;
Object resultValue;

try
{
connForUpdate.Open();
connForSelect.Open();

//修改前提取
cmd = new OleDbCommand(selectSql, connForSelect);
resultValue = cmd.ExecuteScalar();
Response.Write("修改前:" + resultValue);
Response.Write("<br/>");

resultValue = null;

//执行修改
cmd = new OleDbCommand(updateSql, connForUpdate);
cmd.ExecuteNonQuery();

//修改后提取
cmd = new OleDbCommand(selectSql, connForSelect);
resultValue = cmd.ExecuteScalar();


}
finally
{
connForSelect.Close();
connForUpdate.Close();
}
Response.Write("修改后:" + resultValue);
}

试试.
ztwz 2007-04-07
  • 打赏
  • 举报
回复
友情UP一下,
偶用access数据库,主键设为自增型,有时候会跳数字:(
alicc 2007-04-07
  • 打赏
  • 举报
回复
这里付上操作数据库的代码:
说明:test.mdb中一个表,test 表,中间有两个自段id 和 num 都是数字。记录就一条 id=1 num=1
protected void LinkButton11_Click(object sender, EventArgs e)
{
String connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/test.mdb") + ";Persist Security Info=True;";
String selectSql = "select [num] from [test] where [id]=1";
String updateSql = "Update [test] set [num]=[num]+1 where [id]=1";


OleDbConnection connForUpdate = new OleDbConnection(connStr);
OleDbConnection connForSelect = new OleDbConnection(connStr);

OleDbCommand cmd;
Object resultValue;

try
{
connForUpdate.Open();
connForSelect.Open();

//修改前提取
cmd = new OleDbCommand(selectSql, connForSelect);
resultValue = cmd.ExecuteScalar();
Response.Write("修改前:" + resultValue);
Response.Write("<br/>");

resultValue = null;

//执行修改
cmd = new OleDbCommand(updateSql, connForUpdate);
cmd.ExecuteNonQuery();

//修改后提取
cmd = new OleDbCommand(selectSql, connForSelect);
resultValue = cmd.ExecuteScalar();
Response.Write("修改后:" + resultValue);

}
finally
{
connForSelect.Close();
connForUpdate.Close();
}
}

此代码的结果是:
修改前:6
修改后:6


62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧