我做了幾個靜態類,以避免多次重寫相同的代碼並將所有與數據庫相關的方法保留在同一位置。自定義asp.net數據庫組件中的SqlConnection屬性
類是這樣的:
public static class Database_dbSurvey
{
public static DataSet GetQuestionari()
{
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["default_connection"].ConnectionString);
string query = "[admin].[SRV_Categorie_Lista]";
SqlCommand cmd = new SqlCommand(query, connection);
cmd.CommandType = CommandType.StoredProcedure;
//GetDataSet use the SqlDataAdapter.fill() method
return Utils.GetDataSet(cmd);
}
etc.... (others similar methods)
}
我想減少代碼,我想使它更「面向對象」,於是我開始製作屬性爲SqlConnection的(這是相同的爲這個類的每個方法)。
private static SqlConnection connection
{
get { return new SqlConnection(ConfigurationManager.ConnectionStrings["default_connection"].ConnectionString); }
}
的問題是,它與SqlDataAdapter.fill()完美地工作,直到我用這樣的方法:
using (connection)
{
connection.Open();
cmd.ExecuteNonQuery();
}
現在,連接的未來使用會拋出「不istanziated 「例外,我不明白爲什麼。
什麼是定義連接屬性的正確方法?
p.s. 如果你有改進的代碼將higly理解的其它建議
編輯: 我仍然不明白爲什麼「新」的關鍵字不創建的SQLConnection每次我把它的另一istance。然而 我做了一些改動,以使代碼更安全:
private static string connection_string
{
get { return ConfigurationManager.ConnectionStrings["Connection_dbPrysmianSurvey"].ConnectionString; }
}
public static DataSet GetQuestionari(string username)
{
string query = "[dbo].[SRV_Test_Lista]";
using (SqlConnection connection = new SqlConnection(connection_string))
using (SqlCommand cmd = new SqlCommand(query, connection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@username", username);
return Utils.GetDataSet(cmd);
}
}
public static int CreaTest(string ID_questionario, string username)
{
string query = "[dbo].[srv_test_genera]";
using (SqlConnection connection = new SqlConnection(connection_string))
using (SqlCommand cmd = new SqlCommand(query, connection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ID_categoria", ID_questionario);
cmd.Parameters.AddWithValue("@ID_utente", username);
connection.Open();
return (int)cmd.ExecuteScalar();
}
}
但考慮到一個事實,我有40-50的方法,它仍然是一個痛苦的改寫同一線40-50倍,有什麼建議?
我沒有得到它...... NEW關鍵字的重點不是每次都創建一個NEW連接?我認爲,即使我處理連接,下次我使用該屬性時,get會使我成爲一個新的SQLConnection。所以你告訴我,即時通訊爲每個用戶使用相同的連接?這意味着我只創建一個連接而不實際關閉它? – Simone