c#中变量的奇怪行为

时间:2017-12-29 06:17:00

标签: c# asp.net variables sqldatasource

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您已尝试将字符串值传递给分类为Int32

的内容

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

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

然后你可以像现在一样使用它来继续使用它

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