SQLParameter


Rappi

Mitglied
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:
select *
from tabelle
where key_tabelle in (234,5323,523,2342)
Mit Parameter in C# sieht das dann bei mir so aus:
Code:
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
Code:
myCommand.Parameters["@pWerte"].Value = "123,12345,3423,2322";
folgendes Statement baut:
Code:
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?
 

Rappi

Mitglied
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!
 

FwDonnerbalken

Erfahrenes Mitglied
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.
 

martinpriebe

Erfahrenes Mitglied
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