2010-03-19 79 views
1

確定現在我使用的是SQL數據庫,以從不同的表中的值...所以我進行連接,並得到這樣的價值觀: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(); 

可我喜歡把它放在一個函數並調用它,而不是..代碼看起來更清潔...... 我嘗試這樣做,但我得到如下錯誤:

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

任何建議???

感謝

回答

6
  1. 你絕對可以分享「開放連接」的代碼,沒有理由去複製它。
  2. 使用ASP.NET的SQL Server提供程序時,每次「關閉」連接的開銷都很小。它只是將連接返回到進程的連接池(請參閱here),因此打開下一個連接將使用很少的開銷。我認爲在每次操作後關閉連接是一種很好的做法。
+0

希望我很久以前就知道這個... –

1

通常情況是,您爲多個行集創建單獨的連接。

如果您可以使用聯接來生成一個有意義的行集,那在服務器端而不是客戶端通常是一件好事。

您可能還希望查看多個連接並使用異步功能,以便同時排列所有請求而不是按順序排列 - 具有look at this article

5

我使用「使用」。你可以在裏面包含儘可能多的查詢。完成後,它會爲您清理。

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

+1表示「使用」 –

1

不,您不必每次都打開和關閉連接,只要您使用相同的數據庫即可。什麼,你需要改變的是

sqlCommand's queryString every time.

像什麼@durilai說,[using]是非常有用的。 Using實際上具有比這更多的功能,但實際上它會在您的代碼周圍放置一個try/catch塊並在這種情況下調用dispose來關閉連接。

任何需要打開/關閉的東西都可以和使用一起使用,比如文本編寫器或其他對象。