ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
2459
2459
EMPFEHLEN
-
Hallöle zusammen...
Ich hab ein kleines Problem.
Und zwar weiss ich momentan nicht, wie ich per parameter eine Kommaseparierte liste von Int-Werten in mein SQLCommand einbaue.
Ziel wäre ein ähnliches Statement:
Code :1 2 3
select * from tabelle where key_tabelle in (234,5323,523,2342)
Mit Parameter in C# sieht das dann bei mir so aus:
Code :1 2
myCommand = "select * from tabelle where key_tabelle in (@pWerte)"; myCommand.Parameters.Add("@pWerte",SqlDbType.NVarChar,255);
Als SqlDbType des Parameters hab ich NVarChar eingetragen, da eine Kommaseparierte Liste nicht als Int Wert durchgeht...
Das Problem dabei ist, dass C# mir aus diesem Befehl
folgendes Statement baut:Code :1
myCommand.Parameters["@pWerte"].Value = "123,12345,3423,2322";
Code :1
select * from tabelle where key_tabelle in ('123,12345,3423,2322')
Sprich: Die Hochkommas da drin will ich nich haben!
Hat jemand nen Tipp, wie ich das am besten löse?
-
Hallo nochmals...
hab das ganze grad mal umgedreht...
Die Werte werden jetzt nicht als INT verglichen, sondern das zu durchsuchende Feld wird vorher in NVARCHAR konvertiert.
Der Paramter hätte dann den Wert
12345','54321','12389
Die begrenzenden Hochkommas werden ja automatisch eingesetzt (Aber selbst wenn ich diese mitschicke klappt es nicht).
Das Problem ist nun, dass er beim MyCommand.ExecuteScalar() einen Fehler ausgibt:
Eingabezeichenfolge hat das falsche Format.
Hat jemand denn schonmal mehrere strings in einem SQLParameter übergeben?
Irgendwie muss das doch gehen... sonst wäre doch die konstellation
Select * from tabelle where key_tabelle in (@SqlParameter)
garnicht möglich!
-
Hi, hänge gerade am gleichen Problem! (Wie) hast Du es inzwischen gelöst? Sofern es überhaupt geht?
-
16.03.08 01:11 #4
Die Verwendung von ExecuteScalar macht hier überhaußt keinen Sinn, da ExecuteScalar nur einen int zurückgibt und aussagt, wiviele Zeilen von der Abfrage betroffen waren.
-
18.03.08 11:25 #5
- Registriert seit
- Mar 2007
- Beiträge
- 125
Hi,
also in ExecuteScalar sehe ich auch keinen Sinn wenn du Rückgabewerte hast.
also wenn du die Rückgabewerte haben willst...
SqlDataAdapter ada = new SqlDataAdapter();
DataTable dt = new DataTable();
ada.SelectCommand = cmd;
cmd.CommandText = "select * from tabelle where key_tabelle in in (@pWerte)";
cmd.Parameters.Add("@pWerte", "1234");
try
{
ada.Fill(dt);
}
catch (Exception ex)
{
}
Und 1 Parameter.Add == 1 Wert.
Der verdaut keine Arrays oder dergleichen.
Entweder den string vorher zusammen bauen.
Liste durchlaufen und String erweitern
cmd.CommandText = "select * from tTest where id in ( .."
+ Dein Wert
Und Abschluss + ")
Sodass die Zahlen gleich im String stehen ..
Oder den String mit mehreren Parametern erweitern wie p1, p2, p3 und die dann ersetzen mit mehreren Parameters.Add.
etwas anderes fällt mir momentan nicht ein.
mfg
Martin





Zitieren
Login




