2013-04-23 103 views
0

當我試圖執行它顯示上述錯誤的代碼時。已經是一個開放的DataReader與這個命令相關聯,必須先關閉

try 
{ 
    com.CommandText = "select * from Export"; 
    com.ExecuteReader(); 

    data_mode = "Export"; 
    com.CommandText = "Insert INTO [" + New_access_file + "]." + data_mode + " select * FROM ExportDATA"; 
    com.ExecuteNonQuery(); 
} 
catch 
{ 
    data_mode = "Export"; 
    com.CommandText = "SELECT * INTO [" + New_access_file + "]." + data_mode + " FROM ExportDATA"; 
    com.ExecuteReader(); 
} 

回答

3

你應該總是調用Close方法,當您使用DataReader對象完成。

請注意,當DataReader處於打開狀態時,連接將僅由該DataReader使用。您無法爲Connection執行任何命令,包括創建另一個DataReader,直到原始DataReader關閉。

使用此代碼,

var reader = com.ExecuteReader(); 
//do whatever with reader 

reader.Close(); 

或者

可以使用CommandBehavior.CloseConnection更多信息Will ExecuteReader(CommandBehavior.CloseConnection) always close connection?。我們可以使用帶有命令對象的ExecuteReader方法傳遞它像

var reader = com.ExecuteReader(CommandBehavior.CloseConnection); 

這將確保當我們調用reader.Close()相關聯的連接對象也將被關閉。

+0

感謝它工作完美。 – SoumitaP 2013-04-23 07:34:46

0

你需要一個開放的連接: -

try 
       { 
        con.open(); 

        com.CommandText = "select * from Export"; 
        com.ExecuteReader(); 

        data_mode = "Export"; 
        com.CommandText = "Insert INTO [" + New_access_file + "]." + data_mode + " select * FROM ExportDATA"; 
        com.ExecuteNonQuery(); 
       } 
       catch 
       { 
        data_mode = "Export"; 
        com.CommandText = "SELECT * INTO [" + New_access_file + "]." + data_mode + " FROM ExportDATA"; 
        com.ExecuteReader(); 
       } 
       Finally 
       { 
        con.close(); 
       } 
相關問題