峰峦@叠嶂 2023-01-24 17:30 采纳率: 97.6%
浏览 21
已结题

无法通过嵌套类型“生产数据提取开发.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";

        }
  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-01-24 22:48
    关注

    这个错误是由于在类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事件中才能绑定数据源。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月3日
  • 已采纳回答 1月26日
  • 创建了问题 1月24日

悬赏问题

  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄