utiliser Dapper avec '?'

c# dapper db2

Question

J'essaie d'utiliser Dapper pour communiquer avec un serveur DB2. Le serveur DB2 ne prend pas en charge les paramètres nommés prêts à l'emploi. Il attend un point d'interrogation dans la requête pour chaque paramètre. Y at-il un moyen de soutenir cela avec Dapper? Peut-être que Dapper peut remplacer tous les trucs @Name avec ? avant d'appeler la requête? Et si oui, Dapper génère-t-il les paramètres dans l’ordre?

Sinon, il semble que les pilotes clients DB2 les plus récents prennent en charge les paramètres nommés, mais ils sont désactivés par défaut. Je n'arrive pas à comprendre comment l'allumer. J'ai essayé d'ajouter ce paramètre à la section db2cli.ini [COMMON] de mon client sans aucun changement de comportement. C'était pour le pilote OleDB .

Mise à jour: j'ai ensuite essayé le pilote .NET. Celui-ci semble analyser les noms de variables, mais j'obtiens toujours une erreur étrange lors de l'exécution:

{"ERROR [07004] [IBM] [DB2 / NT64] SQL0313N Le nombre de variables dans l'instruction EXECUTE, le nombre de variables dans l'instruction OPEN ou le nombre d'arguments dans une instruction OPEN pour un curseur paramétré est différent de le nombre de valeurs requises. "}

Ma déclaration ressemble à ceci:

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

Est-ce qu'un INSERT compte comme un EXECUTE? Autant que je sache, j'ai quatre paramètres dans la requête et quatre dans l'objet de commande utilisé. (J'utilise SqlMapper.cs directement et je peux tout voir dans le débogueur.)

Réponse populaire

Vous pouvez essayer ceci:

    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
            });
    }


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi