Verwenden von Dapper zum Anfügen von Parametern mit MySql

c# dapper mysql

Frage

Ich habe ein Problem mit dapper, um Parameter an meine MySql-Abfragen anzuhängen. Nun, das mag ein Noobish-Problem sein, aber ich habe meinen Kopf für den Großteil von 2 Stunden geschlagen und es funktioniert immer noch nicht.

Mein Problem ist mit der Funktion SelectWithParametersTest () in der Mitte. Hier ist, was ich habe ...

EDIT: Ok mehr Details. Der tatsächliche Mysql-Server wirft passt und sagt: "Fehler [07001] [MySQL] [ODBC 3.51 Treiber] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter nicht für alle Parameter verwendet".

Die tatsächliche Ausnahme wird in QueryInternal <T > (...) in der Zeile abgefangen, in der der Reader ausgeführt wird. (mit (var reader = cmd.ExecuteReader ())

Wenn ich den Befehl inspiziere, sind ihm keine Parameter angehängt, aber das param-Objekt (das an die Funktion übergeben wurde) enthält mein anon-Objekt.

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

Akzeptierte Antwort

Yokin, hast du versucht, einen UInt32 statt lange im C # -Code zu verwenden?



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