Ben LINQPad bu girerek bekliyoruz sonucu alabilirsiniz: Like Operator'unu bir SQLite sorgusunda bir Parametre ile nasıl kullanabilirim?
SELECT * FROM WorkTable WHERE WTName LIKE "DSD__20090410014953000%"
(bana "DSD__20090410014953000.xml bir WTName değerine sahip kaydını gösterir)
Ama bu programlı olduğunu yapmaya çalışıyor . çalışırken kanıtlayan denedim:
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());
}
... ama uygulamanın kilitlenmesine neden olur ve benim günlük dosyası söylüyor neden:
Message: From application-wide exception handler: System.Data.SQLite.SQLiteException: SQL logic error or missing database
near "%": syntax error
Belki de, sorgu parametresinin "wtName" yerine "wtName%" olarak adlandırıldığını düşünür; ama parametreyi ve "her ne" operörü ("%") bir boşlukla ayırmak da işe yaramıyor.
const string qry = String.Format("SELECT SiteNum FROM WorkTable WHERE WTName LIKE {0}%", tableName);
... ve tamamen sorgu parametresi olmadan yapıyor, ama ben Troy Hunt yapsam korkuyorum:
Sadece şöyle dizeye sorgu parametresi gömerek kludgy Retro/gidebiliriz Benim evimde ortaya çıkar ve SQL Enjeksiyon hakkında korkuluk yaparken beni bir çarşaf ile defile.
Verilerimi nasıl alabilirim ve eş zamanlı olarak güvenli kod yazabilirim?
Ama bu çalıştın? Çalışamayız. – Steve
SQLite denemedim, ancak emin SQL Server üzerinde çalışır. Onu mevcut projeden kopyaladım. – Dragan
SQLite dizeleri için birleştirme operatörü || bu yüzden yazmalısınız '@wtName || '%' 'Hala bunun hataya eğilimli olduğunu düşünüyorum ve taşınabilir değil – Steve