繁体   English   中英

C#中带有变量的奇怪行为

[英]Strange behavior with variables in c#

我使用的是sqlDataSource,它从数据库中拉出许多行,具体取决于从下拉列表中选择的行数。 这是我的代码隐藏代码:

var query = "SELECT TOP (@MealNumber)  * FROM Recipes";
RecipesDataSource.SelectCommand = query;
RecipesDataSource.SelectParameters.Add("MealNumber", DbType.Int32,MealNumberDD.SelectedValue);

MealNumberDD是我的下拉菜单的ID。 当我切换最后一个参数

RecipesDataSource.SelectParameters.Add("MealNumber", DbType.Int32,MealNumberDD.SelectedValue)

从MealNumberDD.SelectedValue到“ 3”,查询运行完美,信息显示在网格中。 当我将其切换回时,什么都没有显示。

我试过string s = MealNumberDD.Text声明string s = MealNumberDD.Text并使用s作为最后一个参数,但这无济于事。 Ive将MealNumberDD的返回值输出到OutputLabel,并按预期输出。 仍然没有运气,该信息未显示。 我还通过了调试器,变量完全按预期方式传递。 我不知道这是怎么回事。

您添加参数的方法会将param值添加为字符串。 MSDN

你需要做

var s = MealNumberDD.Text;

var param = new SQLParameter("MealNumber", SQLDbType.Int)
{
    Value = Convert.ToInt32(s)
};

RecipesDataSource.SelectParameters.Add(param); 
var query = "SELECT TOP (@MealNumber) * FROM Recipes"; 
RecipesDataSource.SelectCommand = query;

您试图将字符串值传递到分类为Int32

您可以做的是先将您的值解析为一个int(也许使用TryParse

var mealNumberString = MealNumberDD.Text;
int mealNumberParsed = 0;
Int32.TryParse(out mealNumberParsed, mealNumberString);

然后,您可以像现在使用它一样继续使用它

RecipesDataSource.SelectParameters.Add("MealNumber", DbType.Int32,mealNumberParsed )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM