使用數據庫時,不建議一直與數據庫保持連接,最好用時連接用完斷開連接。
我的C#程序中采用“用時連接用完斷開連接”的方式:
- 之前是C#程序調用本地數據庫,沒遇到問題;
- 后來改為C#程序通過IP地址連接遠程數據庫,在某次讀取中遇到“在從服務器接收結果時發生傳輸級錯誤。 (provider: TCP Provider, error: 0 - 指定的網絡名不再可用。)”的報錯。
網上查到有這樣處理的:SqlConnection 連接對象在高並發線程頻繁的打開和關閉導致的,所以處理方式就改成了只有在不使用連接的時候才關閉它。
懷疑是因為改為連接遠程數據庫后,連接數據庫受網絡的影響,才報錯的。
也懷疑是using(){}用的不完全對,其處理托管資源與非托管資源時有區別。
1 //增刪改方法 2 public static int Execute(string sql, Object param) 3 { 4 using (IDbConnection conn = GetConnection()) 5 { 6 return conn.Execute(sql, param); 7 } 8 } 9 10 //連接數據庫 11 private static SqlConnection GetConnection() 12 { 13 SqlConnection connection = new SqlConnection(connectionSqlserver); 14 try 15 { 16 connection.Open(); 17 } 18 catch (Exception e) 19 { 20 logger.ErrorFormat("Exception: {0}", e.Message); 21 Console.WriteLine("Exception: {0}", e.Message); 22 DbConnected = false; 23 return null; 24 } 25 DbConnected = true; 26 return connection; 27 }
記錄一下,后期找找原因。