2014-01-29 92 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