1. 程式人生 > >我想我是海 冬天的大海 心情隨風輕擺

我想我是海 冬天的大海 心情隨風輕擺

在學習程式的初級階段, 大部分人會用到 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()}");
            }
        }
    }
}