我用自己C#程序A读取另一个程序B的临时数据表C(Access数据库),B不定时打开数据库C,并且向里面写数据。
现在我发现我打开数据库读取这个临时表时,有时就会是另一个程序完全死掉,只能结束进程。
在下用的查询程序代码是:
Conn = @"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + FileName + ";";
myCommand = new OleDbDataAdapter("SELECT * FROM " + sheet_name, Conn);
myCommand.Fill(myDataSet, "TEMP");
请问【1】这种情况是否是因为Access是访问独占的?如何解决?如何能将通过我的代码把这个数据库编程非独占的。
【2】我发现上面的代码myCommand.Fill(myDataSet, "TEMP");时,有时会报错,错误提示:“数据库正被另一个程序打开”,请问在下应该采用什么方式打开,才能避免这种情况。
希望给出代码,在线等 
 
 

解决方案 »

  1.   

    使用Sql Server Compact Edition,不但可以更Access一样方便,而且程序代码跟Sql Server的一样不用改变,何乐而不为?而且它也是c/s模式并发访问的。相比之下,没有理由再使用Access的了。
      

  2.   

    试试:
    打开Assess,点击菜单上的"工具/选项/高级"
    看看"默认打开模式"是否是"共享"??
      

  3.   

    我对这个语句的使用情况不了解,是不是我读取的时候,正好那个程序来写信息,导致那个程序挂掉????? 
    Conn = @"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + FileName + ";";
    myCommand = new OleDbDataAdapter("SELECT * FROM " + sheet_name, Conn);
    myCommand.Fill(myDataSet, "TEMP");
      

  4.   

    【1】这种情况是否是因为Access是访问独占的?如何解决?如何能将通过我的代码把这个数据库编程非独占的。
    我记得Access是独占打开的,lz可以试试12楼的方法。