2012-07-25 20 views
5

Tôi gặp sự cố khi sử dụng công cụ lập bản đồ để đính kèm các tham số vào các truy vấn MySql của mình. Bây giờ điều này có thể là một vấn đề khó khăn, nhưng tôi đã đánh bại đầu của tôi về điều này cho phần tốt hơn của 2 giờ bây giờ và nó vẫn không hoạt động.Sử dụng dapper để đính kèm các tham số với MySql

Vấn đề của tôi là với hàm SelectWithParametersTest() ngay ở giữa. Đây là những gì tôi có ...

CHỈNH SỬA: Ok thêm chi tiết. Máy chủ Mysql thực tế ném vừa vặn và nói, "L ERI [07001] [MySQL] [Trình điều khiển ODBC 3.51] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter không được sử dụng cho tất cả các tham số".

Ngoại lệ thực sự bị bắt tại QueryInternal <T> (...) trên dòng nơi thực thi trình đọc. (sử dụng (var reader = cmd.ExecuteReader())

Khi tôi kiểm tra lệnh, không có tham số nào được gắn vào nó, nhưng đối tượng param (được truyền cho hàm) có đối tượng anon của nó trong đó

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

tôi không ở một máy tính ngay bây giờ, nhưng: những gì thực sự xảy ra với điều đó –

+0

xấu của tôi: máy chủ Mysql thực tế ném phù hợp và nói, "LRI [07001] [MySQL] [Trình điều khiển ODBC 3,51] [mysqld-5.1.61-0ubuntu0.11.10.1-log] SQLBindParameter không được sử dụng cho tất cả các tham số". Ngoại lệ thực tế bị bắt tại QueryInternal (...) trên dòng nơi nó thực thi trình đọc. (bằng cách sử dụng (var reader = cmd.ExecuteReader()) Khi tôi kiểm tra lệnh, không có tham số nào được gắn vào nó, nhưng đối tượng param có ở đó.Cũng cảm ơn phản hồi nhanh Marc. – Yojin

+0

Tôi sẽ phải kiểm tra, nhưng nó * trông * giống như MySql ghét các tham số được đặt tên - xem thêm http://stackoverflow.com/questions/1457597/mysql-rejecting-parameter.Nếu đó là chính xác, thì ràng buộc những thứ đó có thể là một nỗi đau lớn. –

Trả lời

0

Yokin, bạn đã thử sử dụng một UInt32 thay vì dài trong mã C#

+0

Đó phải là nhận xét, không phải là câu trả lời –

+0

Làm cách nào để nhận xét, tôi không thấy nút nào (ngoại trừ điều này chú thích) – udog

+0

Hộp văn bản không hiển thị vì có quá nhiều nhận xét, nhưng bên dưới nhận xét, có nút cho biết "thêm/hiển thị thêm 3 nhận xét". Nhấp vào đó, nó sẽ hiển thị hộp văn bản –

Các vấn đề liên quan