c#中变量的奇怪行为

问题描述 投票:0回答:2

我正在使用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.TextBeforehand并使用s作为最后一个参数,但这没有帮助。我已将MealNumberDD的返回值输出到OutputLabel,并按预期输出。仍然没有运气,信息不会显示。我也经历了调试器,变量正在按预期完全传递。我不知道这是怎么回事。

c# asp.net variables sqldatasource
2个回答
1
投票

添加参数的方法会将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;

0
投票

您试图将字符串值传递给您分类为Int32的内容

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

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

然后你就可以像现在一样使用它

RecipesDataSource.SelectParameters.Add("MealNumber", DbType.Int32,mealNumberParsed )
© www.soinside.com 2019 - 2024. All rights reserved.