Мой код имеет механизм мониторинга работоспособности соединения с базой данных, который проверяет состояние соединения с базой данных и, если соединение разорвано, он пытается восстановить соединение через каждые 30 секунд.Во время повторных попыток он использует объект SqlConnection и назначает строку подключения для объекта перед вызовом метода Open.Соответствующая функция выглядит следующим образом.
public int Open(DBConnectionMode ConnectionMode, string server, string database, string user, string password)
{
try
{
SqlConnectionStringBuilder sqlconbuilder = new SqlConnectionStringBuilder();
sqlconbuilder.DataSource = server;
sqlconbuilder.InitialCatalog = database;
if ((server != string.Empty) && (user == string.Empty))
sqlconbuilder.IntegratedSecurity = true;
else
sqlconbuilder.IntegratedSecurity = false;
sqlconbuilder.UserID = user;
sqlconbuilder.Password = password;
if (ConnectionMode == DBConnectionMode.LOCAL)
{
// oConnection is of type SqlConnection
oConnection.ConnectionString = sqlconbuilder.ConnectionString;
oConnection.Open();
}
else
{
oConnectionRemote.ConnectionString = sqlconbuilder.ConnectionString;
oConnectionRemote.Open();
}
//update global connected indicator
if (oCommand.Connection.State == ConnectionState.Open)
isConnected = true;
else
isConnected = false;
return 0;
}
catch (InvalidOperationException ex)
{
return (int)DBErrorCode.CONNECTION_OPEN_INVALID_PARAMS;
}
catch (SqlException ex)
{
return (int)DBErrorCode.CONNECTION_ERROR;
}
catch (Exception ex)
{
throw (ex);
}
}
Строка подключения, возвращаемая sqlconbuilder.ConnectionString, выглядит следующим образом.
Data Source=UK-NHAM-2016-01;Initial Catalog=ArcPubCfg;Integrated Security=False;User ID=sa;Password=xxxxxxx
Во время первых нескольких попыток ничего не происходит неправильно, но затем я запускаюполучаю следующую ошибку.
System.ArgumentException: Keyword not supported: 'password'
Я сузил ошибку до этой строки кода.
oConnection.ConnectionString = sqlconbuilder.ConnectionString;
Я подтвердил, что строка подключения остается той же.Как только я начинаю получать эту ошибку, она продолжает терпеть неудачу в этой строке.Я воссоздаю каждый релевантный объект заново во время каждой повторной попытки, но результат один и тот же.
Есть идеи, что может пойти не так?
Редактировать: Интересно то, чтопроблема не возникает, когда сервер SQL останавливается во время запуска моего приложения.Мое приложение продолжает попытки и не сталкивается с этой ошибкой.Как только соединение с базой данных установлено, а затем оно разрывается, механизм повторных попыток начинает получать эту ошибку через некоторое время.