我需要每个线程连接到一个数据库并执行一些查询,也许某个线程一次可以执行查询。
我创建一个用于通过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调用中重新使用它。
我的问题是:
连接可以同时服务于不同的线程吗? (一个连接全部)
不是由于静态功能引起的数据混乱问题?
我需要每个线程连接到一个数据库并执行一些查询,也许某个线程一次可以执行查询。我创建了一个静态类,用于使用ADO连接到SQL Server数据库。...