无法通过嵌套类型“生产数据提取开发.Form1.SqlCon”来访问外部类型“生产数据提取开发.Form1”的非静态成员;

     您好,以下是我的代码,定义了一个公共方法的getdataset和getdatatable,想实现一运行,combobox1下拉控件就会出现数据表的设备名列表,但运行时combobox1控件总提示,

无法通过嵌套类型“生产数据提取开发.Form1.SqlCon”来访问外部类型“生产数据提取开发.Form1”的非静态成员;

代码如下,请专家给指点一下吧,多谢

     public DataTable getDataTable(string SQLstr, string b_EquipmentInfo)
        {
            DataTable dt = new DataTable();
            getcon();//打开数据库连接
            SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, My_con);
            DataSet ds = new DataSet();
            SQLda.Fill(ds, "b_EquipmentInfo");
            dt = ds.Tables["b_EquipmentInfo"];
            con_close();//关闭数据库连接
            return dt;//返回DataSet对象信息

        }

        static void main(string[] args)
        {

            getcon();


            try
            {   //打开链接
                My_con.Open();

                My_con = new SqlConnection(Str_sqlcon1);

                MessageBox.Show("连接数据库成功");

                SqlCommand sqlcmd = new SqlCommand("SELECT * FROM b_EquipmentInfo,conn");
                
                //用DataAdapter声明一个对象
                SqlDataAdapter sda = new SqlDataAdapter();

                //执行查询语句
                sda.SelectCommand = sqlcmd;

                //创建一个数据集对象
                DataSet ds = new DataSet();

            }

            catch (Exception ex)
            {
                MessageBox.Show("连接数据库失败");

                return;

            }

            finally
            {
                if (My_con != null)
                {
                    //关闭数据库连接
                    My_con.Close();
                }

            }
          
        }

        private void ComboBoxForm_Load(object sender, EventArgs e)
        {
         
            SqlCon A = new SqlCon();

            A.getDataSet("ds","数据集");

            A.getDataTable("dt", "数据表");

            // 绑定combobox的数据集
            comboBox1.DataSource = A.getDataSet("ds", "数据集");

            //选定combobox显示的成员及将Name这一列显示在combobox中
            comboBox1.DisplayMember = "Equipmentname";

            //combobox的实际取值
            comboBox1.ValueMember = "Equipmentcode";

        }

这个错误是由于在类SqlCon中定义的方法getDataSet和getDataTable是非静态的,而在main函数中直接使用了SqlCon类的对象,导致无法访问非静态方法。
解决办法是在main函数中使用SqlCon类的实例对象来调用非静态方法。
例如:

SqlCon A = new SqlCon();
A.getDataSet("ds","数据集");
A.getDataTable("dt", "数据表");


或者在getDataSet和getDataTable方法上加上static关键字,使其变为静态方法。

另外还有一个问题就是在ComboBoxForm_Load事件中

 comboBox1.DataSource = A.getDataSet("ds", "数据集");


A.getDataSet("ds", "数据集")返回的是一个DataSet类型的对象,而不是DataTable类型的对象,而DataTable类型的对象才能绑定到ComboBox控件的DataSource属性上。

所以需要修改一下,可以将getDataSet方法改为返回DataTable类型的对象,并且将绑定的方式改为:

 comboBox1.DataSource = A.getDataTable("dt", "数据表");


最后需要注意一下是在ComboBoxForm_Load事件中绑定数据源,还需要在main函数中先连接数据库,然后在ComboBoxForm_Load事件中才能绑定数据源。