Я получаю эту ошибку, когда пытаюсь получить все имя пользователя из производственной скопированной локальной базы данных, я думаю, это из-за не закрытия соединения должным образом, но я не знаю, как это сделать. Я использую Microsoft Enterprise Library, муравьиную мысль или комментарий об этом?Ошибка SQL Server при потере сотен записей
Timeout expired. The timeout period elapsed prior to
obtaining a connection from the pool. This may have occurred
because all pooled connections were in use and max pool size was reached.
это mothod, который получает имя пользователя и пароль и создает ошибку.
private Model.UsernameandPass GetUsernamePass(string AccountNumber)
{
Model.UsernameandPass model = null;
string myConnection = System.Configuration.ConfigurationManager.ConnectionStrings[connectionName].ToString();
SqlDatabase db = new SqlDatabase(myConnection);
using (DbCommand command = db.GetStoredProcCommand("Get_TheUsernamePassWordFromProduction"))
{
db.AddInParameter(command, "AccountNumber", DbType.String, AccountNumber);
var result = db.ExecuteReader(command);
try
{
while (result.Read())
{
model = new Model.UsernameandPass();
model.Username = result.GetString(1);
model.Password = result.GetString(2);
}
}
catch (Exception ex)
{
}
}
db = null;
return model;
}
Я получаю сообщение об ошибке в этой строке после того, как программа запускается некоторое время.
var result = db.ExecuteReader(command);
Похоже, что вы создаете несколько соединений и не закрываете их и в конечном итоге превышают размер вашего пула. Положите инструкцию using вокруг кода соединения или у вас есть, наконец, закрыть соединения. Попробуйте http://stackoverflow.com/questions/4717789/in-a-using-block-is-a-sqlconnection-closed-on -Возвращение или исключение- – SoulTrain