解决  只是关闭应用程序?

ConsKa

知名会员
已加入
2020年12月11日
留言内容
53
编程经验
Beginner
我的表单依赖于SQL数据库视图,并且我想捕获用户是否无法连接。

我显示的用于测试SQL连接的代码似乎都可以正常工作(我可以阻止我的连接并接收消息,取消阻止和应用程序加载)

问题是关闭表格。您可以在示例中看到我尝试删除的三个示例"else"下面的bool代码部分。

1.程序挂在此代码上,因为它无法使用this.Dispose()访问已处置的对象。或this.Close();

C#:
static void Main()
{
    Application.Run(new Form1());
}

2.程序关闭,但是如果我使用Application.Exit(),则会打开一个空白表格。

I would like for the application to just close. Rather than do anything 其他, as if there is no SQL connection, there is no application.

我是否以错误的顺序执行此操作,无法解释某些步骤?我不知道为什么空白表格会打开,或者为什么它试图打开该表格,但我告诉它要么关闭它,要么处置它。

在发布此消息之前,我显然已经尝试了几种不同的事件排序方式,如果我没有按照此顺序进行排序,它会挂在Designer.cs的sql.database.Fill(server.View)部分上,因此我认为我的订单更接近应有的状态-但我仍然可以略微调整一下。

用于检查SQL连接的代码:

C#:
bool result = SqlTest(@"Data Source = Server; database= database; Integrated Security=True");

if (result)
{
    InitializeComponent();
   
    // calls the rest of the 'start up' methods
}
else
{
    //this.Close();
    //this.Dispose();
    //System.Windows.Forms.Applciation.Exit();
}

SqlTest()方法是:

C#:
using (SqlConnection connection = new SqlConnection(connectionString))
{
    try
    {
        connection.Open();
        return true;
    }
    catch (SqlException)
    {
        MessageBox.Show("Failed connection");
        return false;
    }
}

感激任何指针。
 
Solution
First of all. Do not call this.Dispose() on a form, especially if someone 其他 has a reference to your form. Let whomever instantiated your form take care of disposing your form. In general, though, when you close your form via this.Close() the garbage collector will take care of disposing it if the person who instantiated your form doesn't explicitly dispose it.

无论如何,最简单的方法是即使在打开表单之前也要检查连接。就像是:
C#:
void Main()
{
    if (SqlTest())
        Application.Run(new MainForm());
}

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,423
位置
弗吉尼亚州切萨皮克
编程经验
10+
First of all. Do not call this.Dispose() on a form, especially if someone 其他 has a reference to your form. Let whomever instantiated your form take care of disposing your form. In general, though, when you close your form via this.Close() the garbage collector will take care of disposing it if the person who instantiated your form doesn't explicitly dispose it.

无论如何,最简单的方法是即使在打开表单之前也要检查连接。就像是:
C#:
void Main()
{
    if (SqlTest())
        Application.Run(new MainForm());
}
 

ConsKa

知名会员
已加入
2020年12月11日
留言内容
53
编程经验
Beginner
效果很好,谢谢您,也感谢您提供有关关闭而不是处置的建议。我通常使用close,但是考虑到问题,我愿意尝试其他方法。
 
最佳 底部