Announcement

Collapse
No announcement yet.

ADO und Parameter mit SQLServer

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO und Parameter mit SQLServer

    Hallo

    Ich habe folgendes Problem:
    Aus Performance Gründen habe ich die COM ADO Komponenten statt ADO Express verwendet. Ich habe einen Wrapper um die COM Komponenten gebaut der wie ADO Express mit Parametern umgehen kann.

    Nun habe ich einem _Command Objekt das SQL Statement "SELECT datediff ( minute, ?, ( SELECT MIN ( c_dataevent_start) FROM t_Adresse WHERE c_dataevent_start > ? ) ) Len" zugewiesen.
    Leider erkennt ADO hier keine Parameter. Das heisst ich habe keine Parameter in der Parameters Collection des _Command Objektes.

    Gibt es eine Möglichkeit ADO dazu überreden diese Parameter doch noch automatisch zu erkennen? Ich verwende MDAC 2.7 RTM.

    Lothar

  • #2
    Hallo,

    das Command-Objekt stellt für das Initialisieren der Parameters-Kollektion zwei Optionen bereit:

    1. Der Entwickler erzeugt über <b>CreateParameter</b> die einzelnen Parameter-Objekte und fügt diese in die Parameters-Kollektion ein.

    2. Der Entwickler beauftragt das Command-Objekt mit dieser Aufgabe, indem er in seiner Anwendung die Methode <b>Refresh</b> der Parameters-Kollektion aufruft. Wird die Methode Refresh aufgerufen, durchsucht das Command-Objekt die Datenbank, die durch das zugeordnete Connection-Objekt festgelegt wird, nach Informationen über die zugewiesene SQL-Anweisung, den Tabellen-Namen oder den Namen der Stored Procedure. Im Fall einer SQL-Datenbank liest ADO den Aufbau der Anweisungs-Parameter aus den Systemtabellen der Datenbank aus und generiert automatisch im Hintergrund die Kollektion der einzelnen Parameter-Objektinstanzen

    Comment


    • #3
      Hallo

      Die Methode Refresh ist mir bekannt. Für das Query

      "SELECT datediff ( minute, ?, ( SELECT MIN ( c_dataevent_start) FROM t_Adresse WHERE c_dataevent_start > ? ) ) Len"

      erhalte ich nach dem Aufruf von Refresh trotzdem 0 Parameter.

      Lotha

      Comment


      • #4
        Hallo,

        das Recordset-Objekt kann nicht zaubern. Wie soll eine Software automatisch erkennen können, was sich hinter dem ersten Fragezeichen verbirgt?
        <pre>
        SELECT datediff ( minute, ?, ( SELECT ...
        </pre>
        Bei einem Parameter im WHERE-Part oder bei einer INTO-Anweisung ist die Sache klar, da ADO die notwendigen Informationen (Datentyp, Datenbreite) direkt in den Systemtabellen (Katalog) der SQL-Datenbank finden kann. Bei einer Funktion wie DataDiff ist dies nicht möglich, da die Funktion verschiedene Datentypen als Parameter erlaubt ( datetime, smalldatetime-Wert oder Zeichenfolge)

        Comment


        • #5
          Besten Dank,
          das leuchtet ein. Es wird mir also nichts anderes übrig bleiben, als die Parameter selber zu erzeugen.

          Lotha

          Comment

          Working...
          X