2011-03-17 181 views
2

我不斷收到無法連接到遠程MS Access數據庫

InvalidOperationException:ExecuteReader需要一個開放且可用的Connection。該連接的當前狀態已關閉。]

這是因爲我的連接已關閉。我的連接字符串有什麼問題?爲什麼不開放。

protected void Page_Load(object sender, EventArgs e) 
    { 
     // Declaration section 

     //OleDbConnection objDBConn; 
     OleDbCommand objCmd; 
     OleDbDataReader objDR; 

     //create connection object 
     System.Data.OleDb.OleDbConnection conn = new 
      System.Data.OleDb.OleDbConnection(); 

     // Modify the connection string and include any 
     // additional required properties for your database. 
     conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
      @"Data source= c:\inetpub\wwwroot\cm485a2\rreAccesscm485a2.mdb"; 

      // Create OleDbCommand object with SQL to execute 
      objCmd = new OleDbCommand("SELECT * " + 
          " FROM customers " + 
          " ORDER BY cust_id", conn); 

      // Create a DataReader and execute the command 
      objDR = objCmd.ExecuteReader(); 

      // Copy results from DataReader to DataGrid object 
      GridView1.DataSource = objDR; 
      GridView1.DataBind(); 


      //close all objects 
      conn.Close(); 
      conn.Dispose(); 

    } 
+3

嘗試連接外的代碼。 CS中的「=」之後的「」可能足以使其不起作用(它與其他值一起使用)。在使用它之前,請嘗試一個明確的'conn.Open'。有時它會自動打開,有時不會,我不確定這些規則是什麼 - 先執行它不會傷害,並且會與'conn.Close'對稱(考慮使用'using') – 2011-03-17 16:23:34

+0

此訪問分貝似乎並不遙遠.... – T30 2014-04-09 08:10:58

回答

6

您需要先打開連接。

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.open.aspx

還,我會用using要避免資源泄漏,這樣的事情:

using (var connection = new OleDbConnection()) 
{ 
    connection.Open(); 
    using (var command = new OleDbCommand("connectionString")) 
    { 
    //Do my stuff. 
    } 
} 

這方面是容易留下由GC未收資源。

HTH

+0

是的,呃。 。 。哇。我想我看了太久。當你一說出來就回到我的電腦,我就覺得自己像個白癡。謝謝!!!! – Mike 2011-03-17 18:07:47

+0

好的,所以我還有另一個問題:我的弦怎麼沒有被接受?我實際上改變了路徑,所以我知道它是正確的路徑:'C:\ Program Files \ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ 129.2.168.163 \ cm485a2 \ rreAccesscm485a2.mdb'不是一個有效的路徑。有任何想法嗎? – Mike 2011-03-17 18:11:35

+0

邁克,檢查:http://www.connectionstrings.com/。 .mdb文件可能被鎖定,或者您沒有權限。很難說。我會使用像C:\ myStuff \ DB \ rreAccesscm485a2.mdb這樣更簡單的路徑。 – Marcote 2011-03-17 18:34:12

2

您需要在設置連接字符串後調用conn.Open()。

編輯:Woops,Markust打我給它40秒的xD

-1

改變你的連接字符串如下...

conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
      @"Data source= c:\\inetpub\\wwwroot\\cm485a2\\rreAccesscm485a2.mdb"; 

*note: '\\' instead of '\' 
+0

OP和您的代碼示例使用字符串文字字符'@',它告訴編譯器將其轉換爲\,而不是將其視爲轉義變量。這裏有一些關於字符串文字的官方文檔。 (http://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx) – 2012-08-29 19:59:23