在所有线程之间使用公共SQL Server连接并同时使用

问题描述 投票:0回答:1

我需要每个线程连接到一个数据库并执行一些查询,也许某个线程一次可以执行查询。

我创建一个用于通过ADO.NET连接到SQL Server数据库的静态类:

public static class ADOFire
{
    static System.Data.SqlClient.SqlConnection Cnn = new System.Data.SqlClient.SqlConnection();

    public static string CnnString { get; set; }

    public static void CreateConnection()
    {
        if (Cnn.State == ConnectionState.Open)
            return;

        Cnn.ConnectionString = CnnString = ConfigurationManager.ConnectionStrings["CnnString"].ToString();

        if (Cnn.State != System.Data.ConnectionState.Open) 
            Cnn.Open();
    }

    public static System.Data.DataTable GetTable(System.Data.SqlClient.SqlCommand Com, System.Data.SqlClient.SqlDataAdapter Ada, string ComText)
    {
        CreateConnection();
        Com.Connection = Cnn;
        Ada.SelectCommand = Com;

        try
        {
            System.Data.DataTable T = new System.Data.DataTable();
            Com.CommandText = ComText;
            Ada.Fill(T);
            return T;
        }
        catch { return null; }
    }
}

并且在每个线程中,我这样调用静态函数:

System.Data.SqlClient.SqlCommand Com = new System.Data.SqlClient.SqlCommand();
System.Data.SqlClient.SqlDataAdapter Ada = new System.Data.SqlClient.SqlDataAdapter();
Datatable dt =  ADOFire.GetTable(Com, Ada, "Some Query 'select * from x'");

基于this link,在打开新连接或从现有连接使用之间没有太大区别

[每当用户在连接上调用Open时,池管理器就会在池中寻找可用的连接。如果池化连接可用,则将其返回给调用方,而不是打开新连接。当应用程序在连接上调用“关闭”时,池化程序将其返回到活动连接的池化集中,而不是关闭它。一旦连接返回到池中,就可以在下一个Open调用中重新使用它。

我的问题是:

  1. 连接可以同时服务于不同的线程吗? (一个连接全部)

  2. 不是由于静态功能引起的数据混乱问题?

我需要每个线程连接到一个数据库并执行一些查询,也许某个线程一次可以执行查询。我创建了一个静态类,用于使用ADO连接到SQL Server数据库。...

c# sql-server multithreading static ado.net
1个回答
0
投票
  1. 否,ADO.NET不会有两个线程同时访问same.conection
© www.soinside.com 2019 - 2024. All rights reserved.