-5

我已经以“加载”事件的形式编写了这段代码

        MessageBox.Show("Message 1");
        string strConnectionString = @"Data Source=HB-VAIO\SQLEXPRESS;Initial Catalog=DB1;Integrated Security=True;Pooling=False";
        SqlCommand cmdAddPackage = new SqlCommand("AddPackage");
        SqlConnection con = new SqlConnection();
        con.ConnectionString = strConnectionString;

        cmdAddPackage.CommandType = CommandType.StoredProcedure;
        cmdAddPackage.Parameters.Add(new SqlParameter("@GUIDOutput",SqlDbType.UniqueIdentifier)).Direction = ParameterDirection.Output;

        Guid GUI = (Guid) cmdAddPackage.ExecuteScalar();   // Error should be raised but there is no error
        MessageBox.Show(GUI.ToString());
        cmdAddPackage.Connection.Close();
        textBox1.Text = GUI.ToString();
        MessageBox.Show("end");

我知道代码是错误的!它应该引发“无法打开登录请求的数据库“DB1”。登录失败。用户“HB-VAIO\SONY”登录失败。” 在第 8 行,但是当我运行程序时没有引发错误,第一个消息框弹出但没有第二个和第三个消息框的迹象,并且表单加载成功。

代码的错误之处在于:

  • 我的数据库名称是“DB”,但在这段代码中我使用了“DB1”。

  • 未设置 cmdAddPackage 的连接。

当我将相同的代码添加到 button1_Click 事件时,它会显示错误。

你能帮我为什么会这样吗?

我没有找到任何答案:(

4

1 回答 1

0

你使用什么 UI 框架?一些 .Net UI 框架确实为您提供了一些“加载”事件,但也有一些会发生在您的偶数处理程序期间发生的所有异常,“为最终用户提供更好的 UI 体验”。

您可以轻松检查是否在调试器下的 OUTPUT 面板中引发任何异常。如果你看到任何“第一次机会异常”——那么你就有了,你的 UI 框架是“安静的”。

添加 try-catch,或添加 application.unhandledexception 事件处理程序,并尝试忍受您安静的 UI。

如果我没记错的话,WPF 喜欢默默地跳过异常,而 WinForms 往往会立即崩溃。但我在这里可能错了。

于 2013-04-25T13:20:45.207 回答