我想我是海 冬天的大海 心情隨風輕擺
阿新 • • 發佈:2018-12-18
在學習程式的初級階段, 大部分人會用到 SqlHelper , 但不能說正好看到的是正確的。
曾經見過有的 SqlHelper , 把 建立連線寫成了 static , 一個連線完成所有功能, 至始至終不釋放。
從某個角度上看, 一個連線就完成所有功能, 那豈不是節省了許多資源?
但事實上沒這麼簡單, 下面的程式可以證明這一點:
using System; using System.Data; using System.Data.SqlClient; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static string connString = @"Data Source=.\sqlserver2014;Initial Catalog=tempdb;Integrated Security=True"; static SqlConnection conn = new SqlConnection(connString); static void Main(string[] args) { Parallel.For(0, 10, (i) => { try { Test(i); } catch (Exception ex) { Console.WriteLine($"{i}出錯:,{ex.Message}"); } }); Console.WriteLine("End"); Console.Read(); } private static void Test(int i) { if (conn.State != ConnectionState.Open) conn.Open(); SqlCommand cmd = new SqlCommand("select 'ok' as result", conn); Console.WriteLine($"{i}=>{cmd.ExecuteScalar()}"); } } }
正確寫法:
using System; using System.Data; using System.Data.SqlClient; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static string connString = @"Data Source=.\sqlserver2014;Initial Catalog=tempdb;Integrated Security=True"; static void Main(string[] args) { Parallel.For(0, 10, (i) => { try { Test(i); } catch (Exception ex) { Console.WriteLine($"{i}出錯:,{ex.Message}"); } }); Console.WriteLine("End"); Console.Read(); } private static void Test(int i) { using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); SqlCommand cmd = new SqlCommand("select 'ok' as result", conn); Console.WriteLine($"{i}=>{cmd.ExecuteScalar()}"); } } } }