Click here to Skip to main content
15,888,351 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
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 :

C#
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 :

C#
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);
            }
        }

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 ?
Posted
Updated 2-May-17 4:32am

1 solution

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:
C#
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();
}

OR
A slightly tidier version of that for loop is
C#
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();

}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900