我有一個類和我的MySqlConnection是在那裏:關閉連接/ MySqlDataReader將不起作用
public class DB
{
private static MySqlConnection _Connection;
public static MySqlConnection Connection
{
get
{
if(_Connection == null)
{
string cs = string.Format("SERVER={0}; DATABASE={1}; UID={2}; PWD={3};", SERVER_ADRESS, DATABASE, UID, PWD);
_Connection = new MySqlConnection(cs);
}
if(_Connection.State == System.Data.ConnectionState.Closed)
try
{
MessageBox.Show("MySQL Connection ist geschlossen. Öffne Sie");
_Connection.Open();
}
catch(MySqlException ex)
{
switch (ex.Number)
{
case 0:
MessageBox.Show("Verbindung zum Server konnte nicht hergestellt werden.");
break;
case 1045:
MessageBox.Show("Ungültiger Benutzername/Passwort.");
break;
default:
MessageBox.Show(ex.Message);
break;
}
}
return _Connection;
}
}
}
這樣我就可以使用帶有DB.Connection
中的所有其他類此連接。
但現在我得到「DataReader已經打開」。 但我所有的DataReader都在使用中。
我們開始在我的登錄頁:
using (loginreader = cmd.ExecuteReader())
{
if (loginreader.Read())
{
DB.Connection.Close();
return true;
}
else
{
DB.Connection.Close();
return false;
}
loginreader.Close();
}
我想這是行不通的。但第一個錯誤消息登錄後,我在83線上的另一類:
DataTable schema = null;
using (var schemaCommand = new MySqlCommand("SELECT * FROM " + firmCustomerTablename, connection))
{
using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
{
schema = reader.GetSchemaTable();
}
}
這也在使用中。所以我不明白爲什麼我會得到這個錯誤。我想關閉連接/ DataReaders不工作。
在此更改之前,我爲每個站點建立了連接。但是我的節目沒有很好的表現。所以我決定建立一個始終打開的連接,並且只需要打開查詢連接。現在我得到DataReader錯誤。
有人可以解釋我,爲什麼使用不關閉DataReader?而83行不是一個DataReader它是一個var,所以我不知道爲什麼我在這一行得到這個錯誤。
有你的整個比如一個靜態的連接是不是一個很好的解決方案。您應該打開每個查詢或更新的連接。這樣做會導致超出你所描述的問題的更多問題。如果這導致性能不佳,那麼解決這個問題(確保連接正確合併,你及時處理/關閉它們等)。 –
它會損害性能以每5秒打開一次連接。因爲所有的東西都會從數據庫讀取。點擊按鈕打開一個包含數據庫內容的窗口。另外點擊另一個按鈕等等。 –
它不應該每5秒鐘就要殺死性能來創建連接。如果是,則某些設置不正確。你是否真的證實它正在發生或只是假設?請參閱:https://stackoverflow.com/questions/9705637/executereader-requires-an-open-and-available-connection-the-connections-curren/9707060#9707060和https://stackoverflow.com/questions/26089420/ c-sharp-mysql-connection-pooling –