如何根据多选列表框从数据库中选择数据?
我在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();
}