c# – 如何在SQLite查询中使用带有参数的Like运算符?

c# – 如何在SQLite查询中使用带有参数的Like运算符?,第1张

概述通过在LINQPad中输入,我可以得到我期望的结果: SELECT * FROM WorkTable WHERE WTName LIKE "DSD__20090410014953000%" (它显示了WTName值为DSD__20090410014953000.xml的记录“) 但尝试以编程方式执行此 *** 作正在尝试.我试过了: const string qry = "SELECT SiteNum F 通过在liNQPad中输入,我可以得到我期望的结果:
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运算符?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1251010.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存