2012-07-25 12 views
5

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

nie jestem przy komputerze już teraz, ale: co właściwie dzieje się z –

+0

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

+0

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 –

Odpowiedz

0

Yokin, czy spróbować użyć UInt32 zamiast długo w kodzie C#

+0

To powinien być komentarz, a nie odpowiedź. –

+0

Jak komentować, nie widzę przycisku (z wyjątkiem tego komentarz) – udog

+0

Pole tekstowe nie wyświetla się, ponieważ jest za dużo komentarzy, ale pod komentarzami znajduje się przycisk "dodaj/pokaż 3 dodatkowe komentarze" .Kliknij na niego, pokaże pole tekstowe –

Powiązane problemy