如何根据多选列表框从数据库中选择数据? [英] How to select data from database based on multi select list box ?

查看:68
本文介绍了如何根据多选列表框从数据库中选择数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在c#windows表格vs2015工作



问题



如何从数据库中选择多个项目基于列表框多选?



详情



我将listbox 1控制属性选择模式设置为Multi简单



以下代码只选择一个从列表框中选择的项目并且没有任何问题但只选择一个项目



但如果我需要多选列表框如何更改我的代码如下:



I work in c# windows form vs2015

Problem

How to select multiple item from database based on list box multiple select ?

Details

I set listbox 1 control property selection mode to Multi Simple

code below select only one item selected from list box and work without any problem but select only one item

but if i need to multi select for list box How to changes my code below :

public DataTable ShowaSpecificSerial(string SerialNo)
        {

            SqlConnection con = new SqlConnection(connection);


            con.Open();
            string str = "select * from View_showdata where SerialNo=@SerialNo";
            SqlCommand com = new SqlCommand();
            com = new SqlCommand(str, con);
            com.Parameters.AddWithValue("@SerialNo", SerialNo);
            SqlDataAdapter oledbda = new SqlDataAdapter();
            oledbda = new SqlDataAdapter(com);
            DataSet ds = new DataSet();
            ds = new DataSet();
            oledbda.Fill(ds, "View_showdata");
            con.Close();
            DataTable dt = new DataTable();
            dt = ds.Tables["View_showdata"];
            return dt;


        }



按钮下面我写下:




under button i write following :

private void button5_Click(object sender, EventArgs e)
        {
            string root = @"D:\Temp";


            if (!Directory.Exists(root))
            {

                Directory.CreateDirectory(root);

            }
            Class1 CLS = new Class1();
            DataTable dt = CLS.ShowaSpecificSerial(listBox3.SelectedValue.ToString());
           
            for (int i = 0; i <= Convert.ToInt32(dt.Rows.Count) - 1; i++)
            {
                txt = "UserID" + dt.Rows[i][0] + "ProductNo" + dt.Rows[i][1] + "Firm Name" + dt.Rows[i][2] + "BtachNo" + dt.Rows[i][3] + "SerialNo" + dt.Rows[i][4];
               
                dm.DM(txt, Color.FromName(comboBox1.SelectedItem.ToString()), Color.White).Save(root + "\\" + dt.Rows[i][4] + ".emf", System.Drawing.Imaging.ImageFormat.Emf);
            }
        }



要查看的示例数据View_showdata:

UserID产品公司BatchNo SerialNo

Ali Parasitemol Farco 2099 000055

Ali ColdFlue Farco 2998 01112

Ali ColdFlue Farco 2998 08888866



结果



假设我做多选列表框到序号为000055和08888866



结果必须完成是创建两个文件图像datamatrix,名称为000055和



08888866在E:/ Temp



和当通过扫描仪读取它或移动读取数据后,每个序列选择



文件名08888866读取数据时必须有:



Ali ColdFlue Farco 2998 08888866



以便如何更改上面的代码以接受来自数据库的多项选择


根据l
它接受多选但不接受数据库。



我尝试过:



如何根据多选列表框从数据库中选择数据?


Sample data to view View_showdata :
UserID Product Firm BatchNo SerialNo
Ali Parasitemol Farco 2099 000055
Ali ColdFlue Farco 2998 01112
Ali ColdFlue Farco 2998 08888866

Result

suppose i make multi select to list box to serial no to 000055 and 08888866

the result must done is create two files image datamatrix with name 000055 and

08888866 in E : /Temp

and when read it by scanner or mobile read data following to every serial selected

file name 08888866 when read it the data must have :

Ali ColdFlue Farco 2998 08888866

so that How to change my code above to accept multi select from database also

according to list box it accept multi select but not from database .

What I have tried:

How to select data from database based on multi select list box ?

推荐答案

不幸的是SqlCommand不能很好地处理列表。



您可以使用StringBuilder构建IN子句的列表,并逐个添加参数,如下所示:
Unfortunately SqlCommand does not handle lists very well.

You could build the list for the IN clause using a StringBuilder and add the parameters one by one like this:
if (listBox1.SelectedItems.Count == 0) return;
using (var conn = new SqlConnection(constring))
{
    conn.Open();
    var query = new StringBuilder("SELECT CustomerID, CompanyName, City FROM Customers WHERE CustomerID IN (");

    using (var cmd = new SqlCommand())
    {
        cmd.Connection = conn;
        var commaRqd = false;
        for (var i = 0; i < listBox1.SelectedItems.Count; i++)
        {
            if (commaRqd) query.Append(",");
                var parmName = string.Format("@P{0}", i);
                query.Append(parmName);
                commaRqd = true;
                cmd.Parameters.AddWithValue(parmName, listBox1.SelectedItems[i].ToString());
        }
        query.Append(")");
        cmd.CommandText = query.ToString();

        var dr = cmd.ExecuteReader();
    }
    conn.Close();
}





for循环的稍微整洁的版本是


OR
A slightly tidier version of that for loop is

using (var cmd = new SqlCommand())
{
    var parmNames = new string[listBox1.SelectedItems.Count];
    for (var i = 0; i < listBox1.SelectedItems.Count; i++)
    {
        parmNames[i] = string.Format("@P{0}", i);
        cmd.Parameters.AddWithValue(parmNames[i], listBox1.SelectedItems[i].ToString());
    }
    query.Append(string.Join(",", parmNames));
    query.Append(")");

    cmd.Connection = conn;
    cmd.CommandText = query.ToString();

    var dr = cmd.ExecuteReader();

}


这篇关于如何根据多选列表框从数据库中选择数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆