如何处理登录失败的SQL异常

时间:2014-10-11 04:42:25

标签: c# visual-studio

我有一个窗体,它提供了一个组合框供用户选择地理区域,然后根据选择设置SQL连接并执行SQL命令。用户总是很有可能无法访问SQL Server。我设置了一个try / catch并向用户显示错误消息,但实际上并不想破坏,我是VS C#的新手,并且正在寻求关于如何将控制传递到用户可以通过制作调整的点的指导不同的选择。

将执行传递回表单加载是否合理?如果是的话,我该怎么做?如果不是,应该如何处理?

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox1.SelectedIndex > 0)
        {
            List<String> distinctTableList = AttributeMap.DistinctTablesList(comboBox1.SelectedItem.ToString());
            lbTableNames.DataSource = distinctTableList;
        }
    }

    public static List<String> DistinctTablesList(String environment)
    {
        List<String> tables = new List<string>();
        var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("cbSettings");
        SqlConnection sqlcon = new SqlConnection(appSettingSection.Settings[environment].Value);
        using (sqlcon)
        {
                        StringBuilder errorMessages = new StringBuilder();
                        using (sqlcon)
                        {
                            try
                            {
                                sqlcon.Open();
                            }
                            catch (SqlException ex)
                            {
                              MessageBox.Show(ex.Message);
                            }
                        }


public partial class frmClassBuilder : Form
{
    private List<AttributeMap> attributeMapList;
    private CacheClassFactory cacheFactory;

    public frmClassBuilder()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        List<String> environmentList = AttributeMap.EnvironmentList();
        comboBox1.DataSource = environmentList;
    }
 =============================================================
    using (sqlcon)
    {
        try
        {
            sqlcon.Open();
        }
        catch (SqlException ex)
        {
          MessageBox.Show(ex.Message);
        }
    }

1 个答案:

答案 0 :(得分:0)

我在其中一个企业桌面客户端中使用了以下方法,但仍然使用它。

假设你有combobox_SelectedIndexChanged()方法,它应该如下所示:

    public void combobox_SelectedIndexChanged()
    {
        string selectedCountry = "country"; //build actual connection string as you do now.
        string connectionString = string.Format("Data Source={0};Initial Catalog=Detrack;Integrated Security=True;", selectedCountry);
        var sqlCon = new SqlConnection(connectionString);
        using (sqlCon)
        {
            // Disable some controls
            try
            {
                sqlCon.Open();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message);
                // Disable "OK"/"Next" button
                return;
            }
            finally
            {
                ///Enable controls
            }

            sqlCon.Close();

            // "OK"/"Next" button
        }
    }

在此方法中,检查是否可以打开连接, 如果它不能:

  • 显示错误消息
  • 禁用允许用户继续交互的控件,直到进行正确选择

如果可以,只需关闭连接并转到代码的下一部分,即实际使用连接。

您还需要某种&#34;检查连接&#34;消息显示给用户并在检查连接时阻止他的交互。