使用数据库时,表单关闭并显示错误

时间:2019-12-28 17:01:57

标签: c# ado.net

我试图做到这一点,以便在更改comboBox中的值时,数据库将显示在dataGridview中。一切似乎都可以正常工作,但是当您关闭表单时会出现错误: 输入图片:

enter image description here

代码:

namespace Cursach
{
    public partial class VoucherForm : Form
    {
        public VoucherForm()
        {
            InitializeComponent();
        }

        public void VoucherCountry()
        {
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.AllowUserToDeleteRows = false;
            dataGridView1.AllowUserToOrderColumns = false;
            dataGridView1.AllowUserToResizeRows = false;
            dataGridView1.AllowDrop = false;
            dataGridView1.ReadOnly = true;

            DB dB = new DB();
            SqlCommand command = new SqlCommand("SELECT * FROM Voucher WHERE Name_Country= @nC", dB.ConnectionSQL());
            command.Parameters.Add("@nC", SqlDbType.VarChar).Value = comboBox1.SelectedValue;
            DataTable table = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter();

            dB.OpenSQL();
            adapter.SelectCommand = command;
            adapter.Fill(table);
            dataGridView1.DataSource = table;
            dB.ClodeSQL();
        }


        private void VoucherForm_Load(object sender, EventArgs e)
        {
            this.countryTableAdapter.Fill(this.cursacDat.Country);
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            VoucherCountry();
        }
}

1 个答案:

答案 0 :(得分:2)

您有一个DB类,可以很好地将数据库代码与用户界面代码分开。我将数据库代码移到DB类中,以检索“国家/地区”数据。请注意,DB类对用户界面一无所知,而用户界面对数据库一无所知。

数据库对象需要关闭和处置。 using块即使有错误也可以为您解决。

    public class DB
    {
        private string ConStr = "Your connection string";

        public DataTable GetCountryData(string nC)
        {
            DataTable dt = new DataTable();
            using (SqlConnection cn = new SqlConnection(ConStr))
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM Voucher WHERE Name_Country= @nC", cn))
            {
                cmd.Parameters.Add("@nC", SqlDbType.VarChar, 100).Value = nC;
                cn.Open();
                dt.Load(cmd.ExecuteReader());
            }
            return dt;
        }
    }

然后以表格的形式。

    private void OpCode()
    {
         if (comboBox1.SelectedIndex < 0)
         {
            MessageBox.Show("Please select a value in the drop down.");
            return;
         }
        DB DataClass = new DB();
        dataGridView1.DataSource = DataClass.GetCountryData(comboBox1.SelectedValue.ToString());
    }