2015-08-28 45 views
1

我得到这个错误关闭:解决错误:已经有一个用此命令相关联的打开的DataReader,必须首先

"There is already an open DataReader associated with this Command which must be closed first"

private readonly object _syncRoot = new object(); 

public void SqlConnect(string server, string db, string user, string pw) 
{ 
    lock (_syncRoot) 
    { 
     new_conn = new SqlConnection("Server=" + server + ";Database=" + db + ";User Id=" + user + ";Password=" + pw + ";"); 
     new_conn.Open(); 
    } 
} 

public string ReadString(string query) 
{ 
    string strResult = null; 
    using (SqlCommand command = new SqlCommand(query, new_conn)) 
    { 
     using (SqlDataReader reader = command.ExecuteReader()) 
     { 

      while (reader.Read()) 
      { 
        strResult = Convert.ToString(reader[0]); 
      } 
      reader.Close(); 
     } 
    } 
    return strResult; 
} 

我找不到什么是错的代码?

+1

你为什么使用'lock'? –

+0

你有没有其他使用'reader'的方法?这可能是你问题的原因。 – Ben

+0

@Ben以及如果你谈论的读者方法它的自我你们也许串阅读器和其他一些狗屎 – KingDollar

回答

1

在调用SqlCommand之前,您必须使用new_com.Status属性检查您的连接是否仍然存在。

我个人使用一个属性来获取连接并在该属性的get我创建连接,如果不存在,如果状态不开我打开它。

+0

好还是同样的错误 而我添加此代码 – KingDollar

+0

你真的需要关闭读者自行处置不这样做呢? –

相关问题