2015-08-28 55 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

你真的需要關閉讀者自行處置不這樣做呢? –

相關問題