2014-01-29 131 views
0

当我查询我的MS Access数据库时,我注意到它被锁定,其他应用程序无法访问它。这里是我的代码:MS Access防止数据库锁定

public void PopulateDataTableSettings() 
    { 
     if (_dt.Rows.Count == 0) 
     { 
      string query = "select * from settings"; 
      using (OleDbConnection conn = new OleDbConnection(_connectionString)) 
      { 
       conn.Open(); 
       using (OleDbCommand cmd = conn.CreateCommand()) 
       { 
        cmd.CommandText = query; 
        OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
        da.Fill(_dt); 
       } 
       conn.Close(); 
      } 
     } 
    } 

这里是我的连接字符串:

 OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(); 



     builder.DataSource = "C:\\shop.mdb"; 
     builder.Provider = "Microsoft.Jet.OLEDB.4.0"; 
     builder.OleDbServices = -1; 
     return builder.ConnectionString; 

除了数据库升级到SQL Server,我可以指定一个连接字符串属性永远不会锁定数据库?我可以使用的数据适配器上是否有属性?

+1

数据文件存放到“C:\”可能会导致问题。尝试将数据库文件从“C:\”复制(不移动)到用户具有“正常”读/写访问权限的位置,例如“C:\ Users \ Public \”,并查看问题是否在使用时保持不变“公共”副本。 –

+0

@GordThompson你的评论有点不正确。 %appdata%也位于具有完全读取/写入权限的C:\中。 – Adrian

回答

1

从您的问题很难说,但我假设您从其他MS Office应用程序访问此?如果是这样,连接属性下有一个名为“Share Deny None”的模式 - 通过使用这种模式,我可以避免大部分(但不一定是全部)的读/写问题。虽然访问非常繁琐,但只有当一个人同时访问它时才会起作用。

更多关于共享拒绝无:http://msdn.microsoft.com/en-us/library/office/aa140022(v=office.10).aspx 另一篇文章有​​类似的问题:Connecting MS Access while another application using the same MS Acess File