我正在使用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
Beforehand并使用s作为最后一个参数,但这没有帮助。我已将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 )