0

我正在尝试创建一个 if 语句,以防我无法打开与 SQL Server 的连接,以显示标签,或者显示另一个表单。代码如下:

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection("Data Source=xxx.ac.uk;Initial Catalog=XXXX;User ID=xxxx;Password=xxxxx");

    try
    {
       // string sql = "SELECT * FROM datatable";
        SqlCommand mycommand = new SqlCommand("SELECT * FROM datatable", conn);
        try
        {
            conn.Open();
            mycommand.ExecuteNonQuery();
        }
        finally
        {
                if (mycommand != null)
                label1.Visible = true;
                label1.Text = "Failed to Access Database! Please log into VPN Using The Link Below.";
        }
    }
    finally
    {
        if (conn != null)

            this.Hide();
        Form1 form = new Form1();
        form.Show();


    }

    }

}

}

每当我脱机运行文件时,都会遇到超时问题,并且由于出现异常而无法使用该应用程序。我想要一个 if 语句来检查是否存在连接,然后转到表单,如果没有,则显示标签。

问候,任何帮助表示赞赏。

4

3 回答 3

1

我认为你的方法试图做的太多了。您不必查询表。只需打开连接就足够了。

var canAccessDB = false;

try
{
    conn.Open();
    canAccessDB = true; // Will only get here if Open() is successful
}
catch
{
    // nothing needed here
}
finally
{
    if (conn != null)
        conn.Dispose(); // Safely clean up conn
}

if (!canAccessDB)
{
    label1.Visible = true;
    label1.Text = "Failed to Access Database! Please log into VPN Using The Link Below.";
}
else
{
    this.Hide();
}

Form1 form = new Form1();
form.Show();
于 2013-03-12T21:54:05.593 回答
0

每次都会运行一个 finally 块。你需要一个带有代码的 catch 块来执行,以防 try 块中的内容出现问题。

于 2013-03-12T21:53:50.820 回答
0

如果连接失败,您可以捕获 SqlException 并向用户显示消息

using (SqlCommand mycommand = new SqlCommand("SELECT * FROM datatable", conn))
{
    try
    {
        conn.Open();
        mycommand.ExecuteNonQuery();
    }
    catch (SqlException ex)
    {
        label1.Visible = true;
        label1.Text = string.Format("Failed to Access Database! Please log into VPN Using The Link Below.\r\n\r\nError: {0}", ex.Message);
        return;
    }

    if (conn != null)
    {
        this.Hide();
        Form1 form = new Form1();
        form.Show();
    }
}
于 2013-03-12T22:01:24.207 回答