加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:38:44 所属栏目:百科 来源:网络整理
导读:通过在LINQPad中输入,我可以得到我期望的结果: SELECT * FROM WorkTable WHERE WTName LIKE "DSD__20090410014953000%" (它显示了WTName值为DSD__20090410014953000.xml的记录“) 但尝试以编程方式执行此操作正在尝试.我试过了: const string qry = "SELEC
通过在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 database
near "%": 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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读