System.ArgumentException:不支持关键字:'password'

时间:2018-10-16 13:48:21

标签: c# sqlconnection

我的代码具有数据库连接运行状况监视程序机制,该机制检查数据库连接状态,如果连接断开,它将尝试每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 Server时不会发生此问题。我的应用程序继续重试,没有遇到此错误。建立数据库连接后,然后断开连接,一段时间后,重试机制将开始收到此错误。

1 个答案:

答案 0 :(得分:0)

挠头后,我设法解决了这个问题。

基本上,每30秒就会从线程函数中调用我问题中的 Open 函数,以尝试恢复数据库连接。线程函数正在使用 Thread.Sleep(30000)运行while循环。我现在将其更改为计时器( System.Timers.Timer ),而不是线程函数。计时器每30秒触发一次,以调用 Open 功能。这样就解决了这个问题。

我仍然不知道为什么这个问题实际上发生了,为什么我的解决方案解决了这个问题。但是只要有效,我就会很开心。