Laden...

StoredProcedures Parameter LADEN/aktualisieren

Erstellt von ZeroQool vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.094 Views
Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 17 Jahren
StoredProcedures Parameter LADEN/aktualisieren

Hallo, in Delphi.net kann man schön eine StoredProcedure in die ADOCommand reinladen u anschließend mit einem Befehl die Parameterliste aktualisieren, aber mit c# will das nicht so wirklich. Bei der SP handelt es ich um eine SQL Insert Anweisung

DelphiCode:

  ADOComProcedure.CommandType := cmdStoredProc;
  ADOComProcedure.CommandText := CT;
  ADOComProcedure.Parameters.Refresh;

C# habe ich folgendes probiert:

      frm_Anmeldung.Connection.Close();
      frm_Anmeldung.Command.CommandType = CommandType.StoredProcedure;
      frm_Anmeldung.Command.CommandText = "PrInsUpdeBayAPIKategorien";
      frm_Anmeldung.Command.Connection = frm_Anmeldung.Connection;
      frm_Anmeldung.Command.Connection.Open();
      frm_Anmeldung.Command.ExecuteNonQuery();

aber bei der letzten Zeile streikt er u sagt mir das

Die PrInsUpdeBayAPIKategorien-Prozedur erwartet den @sint_eBayAPIKategorienID-Parameter; dieser wurde nicht übergeben.

Der Fehler kommt weil ich die SP ausführen will, was ich aber eigentlich nicht machen will, sondern nur die Parameterliste LADEN/aktualisieren. Kennt jemand einen Lösungsweg? thx im voraus.

P.S. Wenn ich zB über das Steuerelement Command die SP lade, fragt der mich, ob die Parameterliste aktualisiert werden soll u dafür muss es doch bestimmt einen Befehl geben... =)

3.728 Beiträge seit 2005
vor 17 Jahren
Prozeduraufruf

Eine Gespeicherte Prozedur ist sozusagen ein Prozeduraufruf auf dem Datenbankserver. Genau wie eine C#-Prozedur kann eine Gespeicherte Prozedur Parameter haben. Wenn Du die Prozedur aufrufen willst, musst Du die benötigten Parameter übergeben. Die Parameter ändern sich zur Laufzeit nicht. Es gibt also keinen Grund, die benötigten Parameter vor der Ausführung abzurufen. Das wäre nur ein unnötiger Netzwerkzugriff auf den Datenbankserver.

Ich verstehe den Sinn des Delphi-Parameter-Refreshs nicht ganz (Vielleicht steckt dahinter ein ganz toller Ansatz, der mir bisher verborgen geblieben ist).

In C# fügst Du die Parameter einfach der Parameters-Auflistung des Command-Objekts hinzu.

P.S. Du kriegst die Metadaten über das InformationSchema des SQL Servers (Einfach per SELECT abfragen).

Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 17 Jahren

Die Parameter werden ja von mir übergeben, aber er kann sie nicht zuordnen, weil mein COMMAND von den SQLParameter her leer ist.

Datenbank.SQLDatenSpeichern(PROZEDURNAME),
      new string[] {Datenbank.Gl_neuerDS,
          "",
          "",
          "",
          "",
          "",
          "",
          "",
          "",
          ""});
3.728 Beiträge seit 2005
vor 17 Jahren
Parameter-Auflistung füllen

Dann füll Deine Parameters-Auflistung des Commands. Wenn Du sie gefüllt hast, ist sie auch nicht mehr leer.

Hier kannst Du Dir anschauen, wie das gemacht wird: Oracle, Stored Procedure und automatisch generierter Primärschlüssel

Das Beispiel ist für Oracle, spielt aber keine Rolle. Bei SQL Server heißt es eben SqlCommand statt OracleCommand, etc....