2012-07-25 13 views
5

Tengo un problema al utilizar dapper para adjuntar parámetros a mis consultas MySql. Ahora bien, este puede ser un problema de noobish, pero me he golpeado la cabeza durante casi 2 horas y todavía no funciona.Uso de dapper para adjuntar parámetros con MySql

Mi problema es con la función SelectWithParametersTest() en el medio. Esto es lo que tengo ...

EDITAR: Ok más detalles. El servidor Mysql real arroja ajustes y dice: "ERROR [07001] [MySQL] [Controlador ODBC 3.51] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter no utilizado para todos los parámetros".

La excepción real queda atrapada en QueryInternal <T> (...) en la línea donde está ejecutando el lector. (Usando (lector var = cmd.ExecuteReader())

Cuando inspeccione el comando no existen parámetros que se le atribuye, pero el objeto parámetro (que se pasa a la función) tiene mi objeto anon en ella.

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

no estoy en un PC en este momento, pero: ¿qué sucede realmente con esa –

+0

Mi mal:? el servidor real Mysql arroja ajustes y dice: "ERROR [07001] [MySQL] [Controlador ODBC 3.51] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter no se utiliza para todos los parámetros". La excepción real queda atrapada en QueryInternal (...) en la línea donde está ejecutando el lector. (usando (var reader = cmd.ExecuteReader()) Cuando inspecciono el comando no hay parámetros adjuntos a él, pero el objeto param está ahí. También gracias por la rápida respuesta Marc. – Yojin

+0

Tendré que verificar, pero * parece * como MySql odia los parámetros nombrados - vea también http://stackoverflow.com/questions/1457597/mysql-rejecting-parameter. Si eso es cierto, entonces vincularlos podría ser un gran dolor. –

Respuesta

0

Yokin, ¿trató de usar un UInt32 en lugar de largo en el código C#

+0

Eso debería ser un comentario, no una respuesta –

+0

¿Cómo hago un comentario, no veo un botón (excepto en este comentario) – udog

+0

El cuadro de texto no se muestra porque hay demasiados comentarios, pero debajo de los comentarios, hay un botón que dice "agregar/mostrar 3 comentarios más". Haga clic en él, se mostrará el cuadro de texto –

Cuestiones relacionadas