Mam problem z użyciem narzędzia dapper do dołączania parametrów do moich zapytań MySql. Teraz może to być problem noobowy, ale pokonałem to przez większą część 2 godzin i nadal nie działa.Używanie narzędzia dapper do dołączania parametrów za pomocą MySql
Mój problem dotyczy funkcji SelectWithParametersTest() na samym środku. Oto, co mam ...
EDYCJA: Ok więcej szczegółów. Rzeczywisty serwer Mysql zgłasza napady i mówi: "ERROR [07001] [MySQL] [sterownik ODBC 3.51] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter nie jest używany dla wszystkich parametrów".
Rzeczywisty wyjątek zostanie przechwycony w QueryInternal <T
> (...) na linii, na której uruchamia czytnik. (Z użyciem (czytnik var = cmd.ExecuteReader())
Kiedy kontrolować polecenia nie ma parametrów, dołączone do niej, a celem param (który został przekazany do funkcji) ma mi obiektów anon w nim.
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; }
}
nie jestem przy komputerze już teraz, ale: co właściwie dzieje się z –
Moje złe, że: rzeczywista serwera MySQL? rzuca pasuje i mówi: "ERROR [07001] [MySQL] [Sterownik ODBC 3.51] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter nie jest używany dla wszystkich parametrów". Rzeczywisty wyjątek zostanie przechwycony w QueryInternal (...) na linii, na której uruchamia czytnik. (przy użyciu (var reader = cmd.ExecuteReader()) Podczas sprawdzania polecenia nie ma żadnych parametrów dołączonych do niego, ale obiekt paramu tam jest.Dziękuję również za szybką odpowiedź Marc. –
Yojin
Będę musiał sprawdzić, ale to * wygląda * tak, jak MySql nie znosi nazwanych parametrów - patrz także http://stackoverflow.com/questions/1457597/mysql-rejecting-parametr Jeśli to jest dokładne, to wiązanie tych może być ogromnym bólem –