在打开表单之前会出现一个未知的异常

时间:2011-10-08 08:20:40

标签: c# .net

以下代码中会出现异常。你能告诉我这段代码中有什么问题吗?打开表单需要时间。在打开表单之前,将显示catch块中的消息框。我的数据库正在运行,但我不知道为什么它运行不顺畅? 请指导......

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace IMS
{
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    // To set up a connection object
    System.Data.SqlClient.SqlConnection con;
    System.Data.OleDb.OleDbDataAdapter da;
    private void Form2_Load(object sender, EventArgs e)
    {
        con = new System.Data.SqlClient.SqlConnection(); 
        // TODO: This line of code loads data into the 'iMSDataSet1.Part_Group'
        //table. You can move, or remove it, as needed.
        this.part_GroupTableAdapter.Fill(this.iMSDataSet1.Part_Group);


        con.ConnectionString = "Data     Source=.\\DataDirectory\\IMS.sdf;Password=ims;Persist Security Info=True";
        //open up a connection to the database
        try
        {
            con.Open();
        }
        catch
        {
            MessageBox.Show("Database Exception");
        }
        //Close up a connection to the database
        con.Close();

    }

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

    }

    private void AddPartGroup_Click(object sender, EventArgs e)
    {
        System.Data.OleDb.OleDbCommandBuilder cb;
        cb = new System.Data.OleDb.OleDbCommandBuilder(da);

        //DataRow dRow = 
    }
}
}

1 个答案:

答案 0 :(得分:7)

嗯,您需要更改处理异常的方式。这样:

catch
{
    MessageBox.Show("Database Exception");
}

不是非常有用。它不仅捕获所有异常(而不仅仅是特定异常);它忽略了异常本身。至少,使用类似的东西:

catch(Exception e)
{
    MessageBox.Show("Database Exception: " + e.Message);
    // Now log e.ToString() somewhere as well
}

这将帮助您解决出错的问题。顺便说一句,我会尝试在UI线程中执行数据库操作,你应该通常只捕获特定的异常 - 但你最直接的改变应该是停止忽略正在抛出的异常中的有用信息。

请注意,在你发现异常之后,你就会继续,好像没有什么不对的 - 事实上这听起来似乎是一个致命的错误,而你的应用程序的其余部分很快就会失败然后。您可能应该强制关闭此应用程序(使用适当的解释),而不是尝试继续处于损坏状态。 (其他选项包括重试失败的操作等 - 重要的是不要继续好像一切都好。)