Autor Beitrag
MarcinD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows 7 Ultimate (64Bit)
VS2008 Prof. - C#
BeitragVerfasst: Fr 03.12.10 11:10 
Hallo zusammen,

ich denke mir, dass es bestimmt ganz einfach ist, ich aber nicht drauf komme. Habe jetzt schon Google und die Suche hier bemüht, aber wahrscheinlich finde ich die richtigen Suchbegriffe nicht.

Also ich habe einen SQL, in dem die Abrechnungsobjekte per IN Befehl gefiltert werden.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
        
OleDbCommand cmd_Aobj = new OleDbCommand();
cmd_Aobj.CommandText = "SELECT Aobj, Bezeichnung, Ort FROM Abrechnungsobjekte WHERE aktiv_bis >= ? AND Aobj in (?)";
cmd_Aobj.Parameters.AddWithValue("@aktiv_bis", System.DateTime.Now.ToShortDateString());
cmd_Aobj.Parameters.AddWithValue("@Aobj_Benutzer", ---????--- );


Wie übergebe ich hier die Daten für den IN Befehl?

Habe es schon mit einem Array versucht, mit einer Datatable und mit einem String "1, 2". Nix klappt.
Bei dem String bekomme ich 0 Zeilen, obwohl, wenn ich die Abfrage direkt auf der Datenbank starte eigentlich 2 kommen sollten.

Bei dem Array und der Datatable bekomme ich den Fehler: "Unbekannter Fehler"
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 03.12.10 11:23 
In dem IN musst du so viele einzelne Parameter verwenden wie du einzelne Werte in dem IN hast. Ein Parameter ist immer genau 1 Wert.
MarcinD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows 7 Ultimate (64Bit)
VS2008 Prof. - C#
BeitragVerfasst: Fr 03.12.10 14:24 
Danke, dass erklärt einiges.
MarcinD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows 7 Ultimate (64Bit)
VS2008 Prof. - C#
BeitragVerfasst: Do 16.12.10 17:23 
Hallo,

leider konnte ich das Problem oben ander lösen, jetzt habe ich aber ein ähnliches Problem.

Ich habe eine Datatable mit Mandanten (Integer) und möchte dazu aus der Datenbank weitere Daten haben.
Wie mache ich das?

Mit Stringbuilder zusammenhängen und dann in den "IN" Teil des SQL einbauen klappt nicht, weil Integer = String nicht klappt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
//In der dt_Mandanten sind die Mandantennummern drin
foreach (DataRow dr in dt_Mandanten.Rows)
  {
    if (String.IsNullOrEmpty(sb_In_Text.ToString()) == true)
    {
      //Wenn erster Eintrag
      sb_In_Text.Append(dr["IDMandant"].ToString());
    }
    else
    {
      //Wenn weiterer Eintrag, dann mit Komma davor
      sb_In_Text.Append(", ");
      sb_In_Text.Append(dr["IDMandant"].ToString());
    }
  }

  //String definieren
  StringBuilder sb = new StringBuilder();
  sb.Append("SELECT Mandant, Name1 FROM KVP_Mandanten WHERE Mandant not in ");
  sb.Append("(?) ORDER BY Mandant");
  cmd.CommandText = sb.ToString(); 

  //In Parameter setzen
  cmd.Parameters.AddWithValue("@In_Mandanten", sb_In_Text.ToString());