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; }
}
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 đó –
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
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. –