C# 使用数据库时,表单关闭时出错

C# 使用数据库时,表单关闭时出错,c#,ado.net,C#,Ado.net,我试图使其在更改组合框中的值时,数据库显示在dataGridview中。一切似乎都正常,但关闭表单时会出现错误: 输入图像: 代码: 您有一个DB类,它可以很好地将数据库代码与用户界面代码分开。我将数据库代码移动到DB类中以检索国家数据。请注意,DB类对用户界面一无所知,而用户界面对数据库一无所知 需要关闭和释放数据库对象使用块即使出现错误,也要为您解决此问题 public class DB { private string ConStr = "Your con

我试图使其在更改组合框中的值时,数据库显示在dataGridview中。一切似乎都正常,但关闭表单时会出现错误: 输入图像:

代码:


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

需要关闭和释放数据库对象<代码>使用块即使出现错误,也要为您解决此问题

    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());
    }
private void操作码()
{
如果(comboBox1.SelectedIndex<0)
{
Show(“请在下拉列表中选择一个值”);
返回;
}
DB DataClass=new DB();
dataGridView1.DataSource=DataClass.GetCountryData(comboBox1.SelectedValue.ToString());
}

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

需要关闭和释放数据库对象<代码>使用块即使出现错误,也要为您解决此问题

    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());
    }
private void操作码()
{
如果(comboBox1.SelectedIndex<0)
{
Show(“请在下拉列表中选择一个值”);
返回;
}
DB DataClass=new DB();
dataGridView1.DataSource=DataClass.GetCountryData(comboBox1.SelectedValue.ToString());
}

您在组合框1中是否有值。SelectedValue?如果值不存在,则表示提供硬编码值以查看来自DB的数据。如果(this.IsDisposed)返回,则添加
作为
VoucherCountry
方法的第一行。然后将其替换为
if(comboBox1.SelectedIndex<0)返回
if(comboBox1.SelectedValue==null)返回
然后再试。@JQSOFT如果(this.IsDisposed)返回,我对您的评论
有点困惑。如果表单被释放,代码将如何运行?@JQSOFT尝试将代码放入selectConnerChanged并关闭表单。代码没有运行。祝您新年快乐。您在
组合框1中是否有价值。选择值
?如果值不存在,则表示提供硬编码值以查看来自DB的数据。如果(this.IsDisposed)返回,则添加
作为
VoucherCountry
方法的第一行。然后将其替换为
if(comboBox1.SelectedIndex<0)返回
if(comboBox1.SelectedValue==null)返回
然后再试。@JQSOFT如果(this.IsDisposed)返回,我对您的评论
有点困惑。如果表单被释放,代码将如何运行?@JQSOFT尝试将代码放入selectConnerChanged并关闭表单。代码没有运行。我也祝你新年快乐。@JQSOFT是的,你说得太对了。无法对空值调用
.ToString
!我喜欢
SelectIndex>=0
谢谢你指出这一点。@JQSOFT是的,你说得太对了。无法对空值调用
.ToString
!我喜欢
SelectIndex>=0
谢谢你指出这一点。