2017-12-29 11 views
0

Ich verwende eine sqlDataSource, die eine Reihe von Zeilen aus einer Datenbank abruft, abhängig davon, welche Nummer aus einem Dropdown ausgewählt ist. Hier ist mein Codebehind-Code:Seltsames Verhalten mit Variablen in C#

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

MealNumberDD ist die ID für mein Dropdown. Als ich den letzten Parameter

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

Von MealNumberDD.SelectedValue Schalter auf „3“, wird die Abfrage perfekt und die Informationen werden in einem Raster angezeigt. Wenn ich es zurückstelle, wird überhaupt nichts angezeigt.

Ich habe versucht zu erklären, string s = MealNumberDD.Text Vorhand und mit s als der letzte Parameter, aber das hilft nicht. Ive gab den Rückgabewert von MealNumberDD an ein OutputLabel aus und gab es wie erwartet aus. Immer noch kein Glück, die Information wird nicht angezeigt. Ich habe auch den Debugger durchlaufen, die Variablen werden wie erwartet komplett durchlaufen. Ich habe keine Ahnung was los ist.

Antwort

1

Ihre Methode zum Hinzufügen eines Parameters fügt den Parameterwert als Zeichenfolge hinzu. MSDN

Sie tun müssen, um

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

Ich habe das versucht. Ich erhalte einen Konvertierungsfehler zwischen Parameter und sqlparameter –

0

Sie versucht haben, einen String-Wert in etwas Ihre Klassifizieren als Int32

passieren Was Sie Ihr Wert zunächst in einen int analysieren tun könnte (vielleicht mit TryParse)

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

Dann können Sie voran gehen und es verwenden, wie Sie Ihre Zeit Verwenden Sie es

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