SELECT * FROM Worktable WHERE WTname liKE "DSD__20090410014953000%"
(它显示了WTname值为DSD__20090410014953000.xml的记录“)
但尝试以编程方式执行此 *** 作正在尝试.我试过了:
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());}
…但它会导致应用程序崩溃,我的日志文件告诉我原因:
Message: From application-wIDe exception handler: System.Data.sqlite.sqliteException: sql logic error or missing databasenear "%": Syntax error
所以也许它认为查询参数被命名为“wtname%”而不是“wtname”;但是将参数和“what”opertor(“%”)与空格分开也不起作用.
我可以通过将查询参数嵌入到字符串中来实现retro / kludgy,如下所示:
const string qry = String.Format("SELECT SiteNum FROM Worktable WHERE WTname liKE {0}%",tablename);
…并且完全不使用查询参数,但是我担心如果我这样做了Troy Hunt会出现在我的房子里,并且在栏杆上关于sql注入时会给我带上床栏.
如何获取数据并同时编写安全代码?
解决方法 应将通配符%添加到参数值,而不是参数名称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());}
而且,我不确定这里是否重要,但通常我会插入参数名称以及占位符中使用的确切名称(@wtname)
总结以上是内存溢出为你收集整理的c# – 如何在SQLite查询中使用带有参数的Like运算符?全部内容,希望文章能够帮你解决c# – 如何在SQLite查询中使用带有参数的Like运算符?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)