Ich habe ein Problem mit Dapper, um Parameter an meine MySQL-Abfragen anhängen. Nun ist das vielleicht ein Problem, aber ich habe meinen Kopf für den Großteil von 2 Stunden geschlagen und es funktioniert immer noch nicht.Verwenden von Dapper zum Anfügen von Parametern mit MySql
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 eigentliche Ausnahme wird bei QueryInternal <T
> (...) in der Zeile abgefangen, in der das Lesegerät ausgeführt wird. (Unter Verwendung von (var reader = cmd.ExecuteReader())
Wenn ich inspizieren den Befehl gibt es keine Parameter, um es angebracht, aber das param-Objekt (das an die Funktion übergeben wurde) hat mein Anon Objekt in ihm.
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; }
}
ich bin nicht an einem PC im Moment, aber: was mit tatsächlich passiert, dass –
Mein schlecht: der eigentliche Mysql-Server wrows passt und sagt: "ERROR [07001] [MySQL] [ODBC 3.51 Treiber] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter wird nicht für alle Parameter verwendet." Die aktuelle Ausnahme wird bei QueryInternal (...) in der Zeile abgefangen, in der das Lesegerät ausgeführt wird. (mit (var reader = cmd.ExecuteReader()) Wenn ich den Befehl inspiziere, sind keine Parameter angehängt, aber das param-Objekt ist da.Auch danke für die schnelle Antwort Marc. –
Yojin
muss ich noch überprüfen, aber es * sieht aus * wie MySql die benannten Parameter hasst - siehe auch http://stackoverflow.com/questions/1457597/mysql-rejecting-parameter Wenn das genau ist, dann könnte das Binden ein großer Schmerz sein –