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);

        }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章