WindowForm数据集xsd的适配器TableAdapter配置动态的SQL

这个问题拖了我差不多一天的时间,郁闷,要是在java里面,可以很轻松就搞定了的

最近在开发WindowForm程序,里面有一个数据集DataSet感觉挺好用的,可以给这个数据集DataSet配置多个适配器TableAdapter,每个适配器可以执行一个SQL


这种适配器TableAdapter,可以使用传参(@) ,占位符(?),如果只是简单的增删查该,基本可以满足了。


而我现在要执行的查询是后面where的条件个数不固定的,比如

select * from mytable where aa = 1 and bb =2

或者

select * from mytable where aa = 1 and bb =2  and cc = 3 and dd = 4


我一开始想到的是自定义一个TableAdapter,然后里面的SQL也是动态组装的,可是碰到一个问题就是OleDbConnection总是被占用,我才行就是界面中的原来的那个TableAdapter占用了该资源。


所以就想在原来的那个TableAdapter上面找到OleDbConnection,来给新的TableAdapter使用,可还是失败了。


最后我研究出了,原来还有扩展TableAdapter这个功能,微软的程序员不简单。


解决方法如下:

1.双击红色区域



2.自动生成如下代码



3.给这个扩张类添加自己的函数

注:this.CommandCollection[1].CommandText = sql;    CommandCollection是一个数组,代码上面有两个适配器,这里是修改第二个适配器。




4.组装SQL,并动态调用代码如下

        //查找
        private void button5_Click(object sender, EventArgs e)
        {
            StringBuilder sql = new StringBuilder("SELECT  q.id, q.factory_code, q.factory_name, q.material_code, ");
            sql.Append("q.number_in_tray, q.produced_date, q.version_number, q.qrcode_id, q.create_time, ");
            sql.Append("q.isUpload, q.isCancel, m.material_name ");
            sql.Append("FROM   t_qrcode_info as q LEFT OUTER JOIN   t_material_info as m ON q.material_code = m.material_code ");
            sql.Append("WHERE   1=1 ");
              
            String materialCode = textBox1.Text;
            if (materialCode != null && !materialCode.Equals(""))
            {
                sql.Append(" and q.material_code like '%" + materialCode +"%'");
            }
            String materialName = textBox3.Text;
            if (materialName != null && !materialName.Equals(""))
            {
                sql.Append(" and m.material_name like '%" + materialName + "%'");
            }
            String versionNumber = textBox2.Text ;
            if (versionNumber != null && !versionNumber.Equals(""))
            {
                sql.Append(" and q.version_number like '%" + versionNumber + "%'");
            }
            String qrcodeId =textBox4.Text ;
            if (qrcodeId != null && !qrcodeId.Equals(""))
            {
                sql.Append(" and q.qrcode_id like '%" + qrcodeId + "%'");
            }
            DateTime date1 = dateTimePicker1.Value;
            DateTime date2 = dateTimePicker2.Value;
            sql.Append(" and q.produced_date >= '" + date1 + "' and q.produced_date <= '" + date2 + "'");
            Boolean isUpload = checkBox1.Checked;
            sql.Append(" and q.isUpload = '" + isUpload + "'");
            Boolean isCancel = checkBox2.Checked;
            sql.Append(" and q.isCancel = '" + isCancel + "'");

            this.t_qrcode_infoTableAdapter.setSQL(sql.ToString());
            this.t_qrcode_infoTableAdapter.FillBy(this.qrcodeDataSet.t_qrcode_info);

        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值