Verwenden von Dapper mit '?'

c# dapper db2

Frage

Ich versuche, Dapper für die Kommunikation mit einem DB2-Server zu verwenden. Der DB2-Server unterstützt die benannten Parameter nicht sofort. Es erwartet ein Fragezeichen in der Abfrage für jeden Parameter. Gibt es eine Möglichkeit, dies mit Dapper zu unterstützen? Vielleicht kann Dapper alle @Name Sachen mit ersetzen ? vor dem Aufruf der Abfrage? Und wenn ja, generiert Dapper die Parameter in der richtigen Reihenfolge?

Wenn nicht, scheinen die neueren DB2-Client-Treiber benannte Parameter zu unterstützen, es ist jedoch standardmäßig deaktiviert. Ich kann nicht herausfinden, wie ich es einschalten kann. Ich habe versucht, diesen Parameter zum Abschnitt db2cli.ini [COMMON] auf meinem Client hinzuzufügen, ohne das Verhalten zu ändern. Das war für den OleDB Treiber.

Update: Ich habe dann den .NET-Treiber ausprobiert. Dieser scheint die Variablennamen zu parsen, aber ich bekomme beim Ausführen immer noch einen seltsamen Fehler:

{"ERROR [07004] [IBM] [DB2 / NT64] SQL0313N Die Anzahl der Variablen in der EXECUTE-Anweisung, die Anzahl der Variablen in der OPEN-Anweisung oder die Anzahl der Argumente in einer OPEN-Anweisung für einen parametrisierten Cursor ist nicht gleich die Anzahl der erforderlichen Werte. "}

Meine Aussage sieht so aus:

INSERT INTO XD.ALERT (PERFORMANCE_ID, CATEGORY, TITLE, DESCRIPTION, DATETIME) VALUES(1234, :Level, :AlertID, :AlertDesc, :DateTime)

Zählt ein INSERT als EXECUTE? Soweit ich das beurteilen kann, habe ich vier Parameter in der Abfrage und vier im verwendeten Befehlsobjekt. (Ich verwende SqlMapper.cs direkt und kann alles im Debugger sehen.)

Beliebte Antwort

Sie können dies versuchen:

    public void SaveAlert(int? level, int? alertId, string alertDesc, DateTime date)
    {            
        _conn.Execute("INSERT INTO XD.ALERT(PERFORMANCE_ID, CATEGORY, TITLE, DESCRIPTION, DATETIME) VALUES(1234, @Level, @AlertID, @AlertDesc, @DateTime)",                
            new {
                Level = level,
                AlertId = alertId,
                AlertDesc = alertDesc,
                DateTime = date
            });
    }


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum