C# 空连接字符串仍在打开,没有错误

C# 空连接字符串仍在打开,没有错误,c#,sql,sql-server,connection-string,C#,Sql,Sql Server,Connection String,我最近将一个Delphi应用程序转换为C#,我遇到了一个SQL连接问题。出于某种原因,在调用CheckConnection函数(如下所示)时,如果我的连接字符串参数为空,则连接仍然能够.Open()无错误。为什么会这样?我觉得我的CheckConnection函数有问题,或者我不了解.Open()的实际工作原理 如何设置-有些文本框包含主机名、用户等,用作连接字符串的参数。正确填写这些参数后,一切正常,但当参数(即文本框)全部留空时,连接仍然打开 String hostname, user, p

我最近将一个Delphi应用程序转换为C#,我遇到了一个SQL连接问题。出于某种原因,在调用
CheckConnection
函数(如下所示)时,如果我的
连接字符串
参数为空,则连接仍然能够
.Open()
无错误。为什么会这样?我觉得我的
CheckConnection
函数有问题,或者我不了解
.Open()
的实际工作原理

如何设置-有些文本框包含主机名、用户等,用作连接字符串的参数。正确填写这些参数后,一切正常,但当参数(即文本框)全部留空时,连接仍然打开

String hostname, user, password, database, protocol, query;
string connString;
IDbConnection SqlConn;
DbProviderFactory factory;    

    public void SetConnectionParams()
    {
        hostname = ServerTextBox.Text.Trim();
        port = StrToIntDef(PortTextBox.Text, 3306);
        user = UserIDTextBox.Text;
        password = PasswordTextBox.Text;
        database = DBTextBox.Text;
        protocol = ProtocolTextBox.Text; //MIGHT not need

        GetConnectionString(); //Get the correct connection string
    } 

    //Gets the connection string from app.config
    //The parameters for the string are all set via textboxes in diff. part of code
    public void GetConnectionString()
    {
        if (MySqlRB.IsChecked == true) //Sets up connection for MySQL
        {
            var cs = ConfigurationManager.ConnectionStrings["MySQL"];
            connString = ConfigurationManager.ConnectionStrings["MySQL"].ToString();
            factory = DbProviderFactories.GetFactory(cs.ProviderName);
            connString = String.Format(connString, hostname, port, database, user, password);
        }
        else //Sets up connection for MS SQL
        {
            if (WindowsAuth.IsChecked == true) //If windows authentication checkbox is checked
            {
                var cs = ConfigurationManager.ConnectionStrings["MSSQL_WA"];
                connString = ConfigurationManager.ConnectionStrings["MSSQL_WA"].ToString();
                factory = DbProviderFactories.GetFactory(cs.ProviderName);
                connString = string.Format(connString, hostname, database);
            }
            else //don't use windows authentication
            {
                var cs = ConfigurationManager.ConnectionStrings["MSSQL"];
                connString = ConfigurationManager.ConnectionStrings["MSSQL"].ToString();
                factory = DbProviderFactories.GetFactory(cs.ProviderName);
                connString = string.Format(connString, hostname, database, user, password);
            }
        }
    }

    //Supposed to check if the connection works or not
    //This is working even if the connection string has empty parameters
    public Boolean CheckConnection(bool check)
    {
        try
        {
            if (!CloseFirst && (SqlConn.State != System.Data.ConnectionState.Open))
            {
                return false;
            }
            else
            {
                using (SqlConn = factory.CreateConnection()) //make the connection
                {
                    SqlConn.Close(); //make sure it's closed first just in case 
                    SqlConn.ConnectionString = connString;
                    SqlConn.Open(); // Open the connection

                    if (SqlConn.State == System.Data.ConnectionState.Open)
                    {
                        SqlConn.Close();
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
        }
        catch
        {
            return false;
        }
    }
示例:我的app.config中有一个sql server字符串的连接字符串:

<add name="MSSQL" providerName="System.Data.SqlClient" 
          connectionString="Data Source={0}; Initial Catalog={1}; User={2}; Password={3};" />
那应该不能打开,对吗?但是它确实会这样做,而且只有在使用
sqlserver
时,
MySQL
才会正确地抛出错误

编辑:

好的,结果表明,仅当我对以下连接字符串使用SQL Server windows身份验证时,才会引发错误:

<add name="MSSQL_WA" providerName="System.Data.SqlClient" connectionString="Data Source={0}; Initial Catalog={1}; Integrated Security=SSPI;"/>


通过调试,数据源和初始目录为空,但连接仍然打开。不确定这是为什么?

您可以添加一个包含空参数的字符串示例,还是说一个空字符串“”?完成!是的,空参数,字符串本身不是空的。。主机名、端口、数据库和用户来自何处,您不会显示它们被设置为任何东西对不起,我在代码中的注释中放了它,应该放得更清楚。它们由文本框设置。我将更新问题。
newsqlconnection(“integratedsecurity=True”).Open()在这里对我有效,可能是因为我有一个默认实例(即“本地”)
<add name="MSSQL_WA" providerName="System.Data.SqlClient" connectionString="Data Source={0}; Initial Catalog={1}; Integrated Security=SSPI;"/>