2013-04-23 74 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(); 
       } 
相关问题