Мне нужно, чтобы каждый поток подключался к одной базе данных и выполнял какой-то запрос, и, возможно, какой-то поток может выполнить запрос за один раз.
Я создаю класс stati c для подключения к SQL Базе данных сервера с ADO. NET:
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; }
}
}
И здесь в каждой теме я называю функцию stati c следующим образом:
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'");
На основе эта ссылка , не имеет большого значения для открытия нового соединения или использования из существующего соединения
Каждый раз, когда пользователь вызывает Open для соединения, диспетчер ищет доступное соединение в пуле. Если пул соединения доступен, он возвращает его вызывающей стороне, а не открывает новое соединение. Когда приложение вызывает Close для соединения, диспетчер возвращает его в объединенный набор активных соединений, а не закрывает его. Как только соединение возвращается в пул, оно готово для повторного использования при следующем вызове Open
Мои вопросы:
Может ли соединение обслуживать другое темы одновременно? (одно соединение для всех)
Не проблема беспорядка данных из-за функции stati c?