2014-11-23 57 views
0

我想从绑定DataList控件的代码背后asp.net如何从代码绑定数据列表后面在asp.net

我正在从列表中的产品ID和选择自己的基地所有产品

继是我的代码:

List<string> r_items_grid = (List<string>)Session["recent_items"]; 

for(int i=0; i < r_items_grid.Count; i++) 
{ 

    OleDbCommand cmd_r_items= new OleDbCommand("SELECT product_id,product_name,product_price,product_image_1 from products where product_id="+ Convert.ToInt32(r_items_grid[i]),con); 
    r_items_reader=cmd_r_items.ExecuteReader(); 

    DataList3.DataSource = r_items_reader; 
    DataList3.DataBind(); 
} 

但我只看到最后一条记录在数据列表

+0

的所有数据,这对于每次更改DatasSource(DS)并重新绑定它的迭代都很明显这样做你应该只分配一次DS,并且只绑定一次,并且应该在循环之外。 – manish 2014-11-23 17:20:04

+0

另外,小心使用该命令查看消毒参数。 – 2014-11-23 17:20:25

回答

1

如果我没看错你是在一个会话试图把字符串列表。遍历整个列表时,每次使用基于列表索引值的新字符串绑定数据列表(DataList3)时。所以它总是显示列表的最后一个字符串值。如果您想根据您的列表,以获取所有数据,您可以使用此

List<string> r_items_grid = (List<string>)Session["recent_items"]; 

string items_id= string.Join(",", r_items_grid);// items_id may be like 1,2,3,4,5. 

OleDbCommand cmd_r_items= new OleDbCommand("SELECT product_id,product_name,product_price,product_image_1 from products where product_id IN ("+ items_id + ")",con); 
r_items_reader=cmd_r_items.ExecuteReader(); 

DataList3.DataSource = r_items_reader; 
DataList3.DataBind(); 

“SELECT的product_id,PRODUCT_NAME,PRODUCT_PRICE,从产品product_image_1其中的product_id IN(1,2,3,4,5 ...) “该查询用于获取items_id为1,2,3,4,5 ...

+0

非常感谢你sk – user6706 2014-11-25 17:43:26

1

的问题是,你一次选择一个记录,然后将其分配给一个数据S乌尔斯河。当你这样做时,以前的值会被覆盖。所以你只能看到最后一个查询的结果。您可以通过发出一个请求然后将其绑定到一个列表来解决该问题:

下面的代码工作假设您知道Session["recent_items"]存储整数,如果存在字符串存储的机会,那么存在SQL注入风险。

List<string> r_items_grid = (List<string>)Session["recent_items"]; 

string ids = string.Join(",", r_items_grid); // Here you get IDs in format 1,2,3,4,5 etc. 

OleDbCommand cmd_r_items= new OleDbCommand("SELECT product_id,product_name,product_price,product_image_1 from products where product_id IN ("+ ids + ")",con); 
r_items_reader=cmd_r_items.ExecuteReader(); 

DataList3.DataSource = r_items_reader; 
DataList3.DataBind(); 
0

没有必要为循环

你可以用逗号分开

string commaSepara = String.Join(",", r_items_grid); 

OleDbParameters commaSepara=new OleDbParameters("@commaSepara",SqlDbType.NVarchar,-1); 
commaSepara.Value=commaSepara; 
OleDbCommand cmd_r_items= new OleDbCommand(@"SELECT product_id,product_name,product_price,product_image_1 from products where product_id 
IN (@commaSepara)",con); 


r_items_reader=cmd_r_items.ExecuteReader(); 

DataList3.DataSource = r_items_reader; 
DataList3.DataBind(); 
+2

你确定'IN(@commaSepara)'有效吗?我很确定SQL Server不允许这样 – dotnetom 2014-11-23 17:24:05

+0

@dotnetom你能告诉我这里会有什么问题......你可以在这里看到http://stackoverflow.com/questions/337704/parameterize-a-sql-in-条款 – 2014-11-23 17:27:41

+0

只需运行上面的代码(或类似的代码),你就会看到自己 – dotnetom 2014-11-23 17:37:12

相关问题