2011-07-29 106 views
0

我正在为我的asp页面创建一个搜索引擎。有15个筛选选项,如价格,日期,名称等。 此外,使用筛选选项是可选的。如果筛选选项保留空白,将进行搜索。 我通过使用if和string找到了解决方案。动态参数和查询

string sorgu = ""; 
dbcommand cmd = CommandClassım.YeniCommand(); 
sorgu += "Select * From Urunler Where "; 
if(UrunAdi.Text != string.Empty) 
{ 
sorgu += "UrunAdi = @UrunAdi"; 
dbparameters prm = cmd.createparameter(); 
prm.Parametername = "@UrunAdi"; 
prm.Value = UrunAdi.Text; 
prm.DbType = DbType.String; 
cmd.Parameters.Add(prm); 
} 
cmd.CommandText = sorgu; 

它的运行上的代码,而不问题。然而,我想用一个参数来筛选动态。 因此,用户通过搜索引擎内的复选框选择这些类别。

当我尝试在代码下运行时,出现以下错误。

Must declare the scalar variable "@cat0". 

代码:

string sorgu = ""; 
DbCommand cmd = CommandClassım.YeniCommand(); 
sorgu += "Select * From Urunler Where "; 
DbParameter prm = cmd.CreateParameter; 
for(int i = 0; i < Category.Length; i++) 
{ 
sorgu += "Kategori = @cat" + i.ToString(); 
prm.ParameterName = "@cat" + i.ToString(); 
prm.Value = Category.Value; 
prm.DbType = DbType.String; 
cmd.Parameters.Add(prm); 
} 
cmd.CommandText = sorgu; 

回答

0

只是一种预感,但是那也许是因为你不提供分类索引?

prm.Value = Category.Value; 

我想它应该是:

prm.Value = Category[i].Value; 
+0

@的所有做为计时首先,感谢你提到你的interesting.As,我不能it.So,我得到了同样的错误。 – Selo

+0

@Selo - 它会给你什么错误?另外,如果你选择了多个类别,你的命令字符串'sorgu'很可能不起作用,因为它看起来像这样:'Select * From Urnler where Kategori = @ cat0Kategori = @ cat1Kategori = @ cat3'等等。 – Tim

+0

@ Tim-正如你所说,我正在使用查询。但是,我得到了同样的错误。另外,我收到“cmd.parameters.add(prm);”中的错误。线。 – Selo