tôi có thể nhận được kết quả tôi mong đợi bằng cách nhập này trong LINQPad:Làm cách nào để sử dụng toán tử Like với tham số trong truy vấn SQLite?
SELECT * FROM WorkTable WHERE WTName LIKE "DSD__20090410014953000%"
(nó chỉ cho tôi các bản ghi trong đó có một giá trị WTName của DSD__20090410014953000.xml ")
Nhưng cố gắng để làm điều này lập trình là . minh cố gắng tôi đã cố gắng:
const string qry = "SELECT SiteNum FROM WorkTable WHERE WTName LIKE @wtName%";
using (SQLiteConnection con = new SQLiteConnection(HHSUtils.GetDBConnection()))
{
con.Open();
SQLiteCommand cmd = new SQLiteCommand(qry, con);
cmd.Parameters.Add(new SQLiteParameter("wtName", tableName));
siteNum = Convert.ToInt32(cmd.ExecuteScalar());
}
... nhưng nó gây ra các ứng dụng để sụp đổ, và tập tin đăng nhập của tôi nói với tôi lý do tại sao:
Message: From application-wide exception handler: System.Data.SQLite.SQLiteException: SQL logic error or missing database
near "%": syntax error
Vì vậy, có thể nó cho rằng tham số truy vấn được đặt tên là "wtName%" thay vì "wtName"; nhưng tách các tham số và "bất cứ điều gì" opertor ("%") với một không gian không hoạt động, một trong hai.
tôi có thể đi retro/kludgy bằng cách chỉ cần nhúng các tham số truy vấn vào chuỗi như vậy:
const string qry = String.Format("SELECT SiteNum FROM WorkTable WHERE WTName LIKE {0}%", tableName);
... và làm mà không có tham số truy vấn hoàn toàn, nhưng tôi sợ nếu tôi đã làm điều đó Troy Hunt sẽ xuất hiện ở nhà tôi và tống tôi vào một lan can trong khi lan can về SQL Injection.
Làm cách nào để có được dữ liệu và đồng thời viết mã an toàn?
Nhưng bạn thử loại này? Không thể làm việc. – Steve
Không thử trên SQLite nhưng nó hoạt động trên SQL Server chắc chắn. Tôi đã sao chép nó từ dự án hiện tại. – Dragan
Toán tử nối cho chuỗi trong SQLite là || vì vậy bạn nên viết '@wtName || '%' 'Tuy nhiên tôi tin rằng đây là quá dễ bị lỗi và không di động – Steve