Utiliser dapper pour attacher des paramètres avec MySql

c# dapper mysql

Question

J'ai rencontré un problème en utilisant dapper pour attacher des paramètres à mes requêtes MySql. Maintenant, cela peut être un problème noobish, mais je me suis battu la tête pendant deux heures maintenant et ça ne marche toujours pas.

Mon problème est avec la fonction SelectWithParametersTest () juste au milieu. Voici ce que j'ai ...

EDIT: Ok plus de détails. Le serveur Mysql proprement dit se lève et dit: "ERROR [07001] [MySQL] [Pilote ODBC 3.51] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter non utilisé pour tous les paramètres".

L'exception réelle est interceptée dans QueryInternal <T > (...) sur la ligne où elle exécute le lecteur. (en utilisant (var reader = cmd.ExecuteReader ())

Lorsque j'inspecte la commande, aucun paramètre n'y est associé, mais l'objet param (qui a été transmis à la fonction) contient mon objet anon.

using System;
using System.Data;
using System.Collections.Generic;
using Dapper;

class Program
{
    static void Main(string[] args)
    {
        using (var dapperExample = new DapperExample())
        {
            //dapperExample.SelectTest();
            dapperExample.SelectWithParametersTest();
        }
    }
}

class DapperExample : IDisposable
{
    #region Fields
    IDbConnection _databaseConnection;
    #endregion

    #region Constructor / Destructor
    public DapperExample()
    {
        _databaseConnection = new System.Data.Odbc.OdbcConnection("DSN=MySqlServer;");
        _databaseConnection.Open();
    }

    public void Dispose()
    {
        if (_databaseConnection != null)
            _databaseConnection.Dispose();
    }
    #endregion

    #region Public Methods (Tests)
    public void SelectTest()
    {
        // This function correctly grabs and prints data.
        string normalSQL = @"SELECT County as CountyNo, CompanyName, Address1, Address2
                             FROM testdb.business
                             WHERE CountyNo = 50 LIMIT 3";

        var result = _databaseConnection.Query<ModelCitizen>(normalSQL);
        this.PrintCitizens(result);
    }

    public void SelectWithParametersTest()
    {
        // This function throws OdbcException: "ERROR [07001] [MySQL][ODBC 3.51 Driver][mysqld-5.1.61-0ubuntu0.11.10.1-log]SQLBindParameter not used for all parameters"
        string parameterizedSQL = @"SELECT County as CountyNo, CompanyName, Address1, Address2
                                    FROM testdb.business
                                    WHERE CountyNo = ?B";
        var result = _databaseConnection.Query<ModelCitizen>(parameterizedSQL, new { B = 50 });
        this.PrintCitizens(result);
    }
    #endregion

    #region Private Methods
    private void PrintCitizens(IEnumerable<ModelCitizen> citizenCollection)
    {
        foreach (var mc in citizenCollection)
        {
            Console.WriteLine("--------");
            Console.WriteLine(mc.BankNo.ToString() + " - " + mc.CompNo.ToString());
            Console.WriteLine(mc.CompanyName);
            Console.WriteLine(mc.Address1);
            Console.WriteLine(mc.Address2);
        }
        Console.ReadKey();
    }
    #endregion
}

public class ModelCitizen
{
    public long CountyNo { get; set; }
    public string CompanyName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
}

Réponse acceptée

Yokin, avez-vous essayé d'utiliser un UInt32 au lieu de long dans le code C #?




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