2017-12-29 36 views
0

드롭 다운에서 선택되는 숫자에 따라 데이터베이스에서 여러 행을 가져 오는 sqlDataSource를 사용하고 있습니다. 내 코드 숨김 코드는 다음과 같습니다.C# 변수에서 이상한 동작 #

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

MealNumberDD는 내 드롭 다운의 ID입니다. 내가 MealNumberDD.SelectedValue에서

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

의 마지막 매개 변수를 전환 할 때 "3", 쿼리가 완벽하게 실행하고 정보가 그리드에 표시됩니다. 다시 전환하면 아무 것도 표시되지 않습니다.

사전에 string s = MealNumberDD.Text을 선언하고 s를 마지막 매개 변수로 사용했지만 도움이되지 않습니다. Ive는 MealNumberDD의 반환 값을 OutputLabel에 출력하고 예상대로 출력합니다. 아직도 운이 없으면 정보가 표시되지 않습니다. 디버거도 살펴 보았습니다. 변수가 예상대로 완전히 전달되었습니다. 나는 이것으로 무슨 일이 벌어지고 있는지 전혀 모른다.

답변

1

매개 변수를 추가하는 방법으로 param 값을 string으로 추가합니다. MSDN

당신은 당신의 (a INT에 먼저 값을 구문 분석 당신이 할 수있는 무엇 Int32

으로 뭔가로 분류를 문자열 값을 전달하려고 시도했습니다

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

나는 그것을 시험해 보았다. 매개 변수와 sql 매개 변수 사이에 변환 오류가 있습니다. –

0

할 필요가 어쩌면 그런 당신이 가서 당신의 현재처럼 사용할 수 있습니다)

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

TryParse를 사용하여 그것을 사용하여

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