测试SQL连接字符串可用性的最有效方法

12

我有这段代码,我试图测试SQL字符串的连接性,但我不知道如何处理 connection.Open = true 的部分,你能帮我解决吗?非常感谢您的时间。

  private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            using (SqlConnection connection = new SqlConnection("Data Source='" + textBox1.Text + "';Initial Catalog='" + textBox2.Text + "';User ID='" + textBox3.Text + "';Password='" + textBox4.Text + "'"))
            {
                try
                {
                    connection.Open();
                    if (connection.Open == true) // if connection.Open was successful
                    {
                        MessageBox.Show("You have been successfully connected to the database!");
                    }
                    else
                    {
                        MessageBox.Show("Connection failed.");
                    }
                }
                catch (SqlException) { }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Chyba v přihlášení: " + ex);
        }
        finally
        {

        }
    }

它说:“无法分配 'open',因为它是一个 '方法组'” 我知道这段代码可能非常糟糕,但我需要以某种方式解决它,而且不知道正确的方法。谢谢。

以下是未打开连接的实际不起作用部分:

using (SqlConnection connection = new SqlConnection("Data Source='" + textBox1.Text + "';Initial Catalog='" + textBox2.Text + "';User ID='" + textBox3.Text + "';Password='" + textBox4.Text + "'"))
        {

             connection.Open();

            if (connection.State == ConnectionState.Open)
            {

                MessageBox.Show("Spojení s databázi problěhlo úspěšně.");
            }
            connection.Close();
            if (connection.State == ConnectionState.Closed)
            {
                MessageBox.Show("Spojení selhalo");
            }
        }

1
.Open()是一个返回void的方法,而不是属性。你不能给它赋值。请看我的答案。 - DGibbs
2个回答

20

你正在使用 connection.Open = true 作为属性来使用。

它是一个方法:connection.Open()

使用ConnectionState枚举来确定连接是否已经打开,例如:

connection.State == ConnectionState.Open

你好,感谢您的时间。我可以问一下,如果连接没有成功,会出现什么情况吗?我尝试使用connection.State == ConnectionState.Closed或Broken,但它没有弹出消息框。 - Marek
你在哪里调用了 connection.State == ConnectionState.Closed?你能更新一下你的问题吗? - DGibbs
谢谢。显然第二个消息框不会显示,因为您刚刚调用了 connection.Open() 来打开连接,因此它是 _open_,而不是 _closed_。尝试调用 connection.Close() 然后测试第二个消息框。 - DGibbs
我尝试过,但当连接打开失败时,它停止了,并且没有弹出消息框。非常感谢您的时间,我已经更新了我的问题,现在是什么代码。 - Marek
当出现这种情况时,您可以始终在调试器中检查连接,应该能够看到它的状态。或者,您可以只需执行 if(connection.State != ConnectionState.Open),然后它将匹配所有其他情况。 - DGibbs

4
你需要通过以下代码检查它是否已打开:
if(connection.State == ConnectionState.Open)
{
  ...
}

你好,感谢您的时间。我可以问一下,如果连接不成功会是什么情况吗?我尝试使用connection.State == ConnectionState.Closed或Broken,但它没有弹出消息框。 - Marek
2
我会尝试使用 connection.State!=ConnetionState.Open - Kamil Budziewski
1
我也尝试过那个,但是也没有弹出消息框。我更新了问题,这样你就能更好地理解我的问题了。 - Marek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接