Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
2459
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Rappi Rappi ist offline Mitglied
    Registriert seit
    Feb 2004
    Ort
    Remscheid
    Beiträge
    19
    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
    Code :
    1
    
    myCommand.Parameters["@pWerte"].Value = "123,12345,3423,2322";
    folgendes Statement baut:
    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?
     

  2. #2
    Rappi Rappi ist offline Mitglied
    Registriert seit
    Feb 2004
    Ort
    Remscheid
    Beiträge
    19
    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!
     

  3. #3
    savcor savcor ist offline Grünschnabel
    Registriert seit
    Mar 2008
    Beiträge
    1
    Hi, hänge gerade am gleichen Problem! (Wie) hast Du es inzwischen gelöst? Sofern es überhaupt geht?
     

  4. #4
    Avatar von FwDonnerbalken
    FwDonnerbalken FwDonnerbalken ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Beiträge
    323
    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.
     
    Gruß,
    Sebastian

    Mein XING Profil

    Hilfreiche Antworten bitte bewerten!

  5. #5
    martinpriebe martinpriebe ist offline Mitglied Gold
    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