簡體   English   中英

SQL連接到數據庫重復

[英]SQL connection to database repeating

好的,現在我正在使用SQL數據庫從不同的表中獲取值...所以我建立了連接並獲取了這樣的值:

DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["XYZConnectionString"].ConnectionString;
connection.Open();
SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Machines", connection);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

sqlCmd.Parameters.AddWithValue("@node", node);
sqlDa.Fill(dt);
connection.Close();

所以這是頁面上的一個查詢,我正在頁面上調用許多其他查詢。

所以我是否需要每次都打開和關閉連接... ???

如果不是,這部分也很常見:

DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["XYZConnectionString"].ConnectionString;
connection.Open();

我可以喜歡將它放在一個函數中,而是調用它嗎..代碼看起來更干凈...我嘗試這樣做,但出現類似以下錯誤:

當前上下文中不存在連接。

有什么建議么???

謝謝

  1. 您絕對可以共享“開放連接”代碼,而無需重復它。
  2. 使用ASP.NET的SQL Server提供程序,每次“關閉”連接的開銷很小。 它只是將連接返回到流程的連接池(請參閱此處 ),因此打開下一個連接將使用很少的開銷。 我認為這是個好習慣,每次操作后都要關閉連接

我使用“使用”。 您可以在內部包含任意數量的查詢。 完成后,它將為您清理。

using (SqlConnection cn = new SqlConnection(connectionString))
{
    using (SqlCommand cm = new SqlCommand(commandString, cn))
    {
        cn.Open();
        cm.ExecuteNonQuery();
    }
}

通常,是的,您為多個行集建立單獨的連接。

如果可以使用聯接來生成單個有意義的行集,那么通常最好在服務器端而不是客戶端上做。

您可能還希望查看建立多個連接並使用異步功能,以便同時而不是按順序對所有請求進行排隊-請參閱本文

不,您不必每次都使用相同的數據庫打開和關閉連接。 您需要更改的是

sqlCommand's queryString every time.

就像@durilai所說的那樣,[ using ]是有用的。 Using實際上具有比這更多的功能,但是從本質上講,它在代碼周圍放置了一個try / catch塊,並在這種情況下調用dispose來關閉連接。

任何需要打開/關閉的東西都可以與using一起使用,因此諸如文本編寫器或其他對象之類的東西也可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM