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

c# – 是否可以在SQLite查询中参数化表和列名称?

发布时间:2020-12-15 04:20:48 所属栏目:百科 来源:网络整理
导读:我试图从C#在SQLite中执行一个参数化查询,并且im使用的方法是创建一个静态命令的行 SQLiteCommand cmd = new SQLiteCommand( "SELECT [ID]" + ",[email]" + ",[serializedata]" + ",[restrictions]" + " FROM " + UserTable + " WHERE @search = @searchpara
我试图从C#在SQLite中执行一个参数化查询,并且im使用的方法是创建一个静态命令的行
SQLiteCommand cmd = new SQLiteCommand(
        "SELECT [ID]" +
            ",[email]" +
            ",[serializedata]" +
            ",[restrictions]" +
        " FROM " + UserTable +
        " WHERE @search = @searchparam",SQLConnection);

        cmd.Parameters.Add(new SQLiteParameter("@searchparam"));
        cmd.Parameters.Add(new SQLiteParameter("@search"));

并称之为:

Command.Parameters["@searchparam"].Value = searchdata;
        Command.Parameters["@search"].Value = search;
        SQLiteDataAdapter slda = new SQLiteDataAdapter(UserSelectUsernameCommand);
        DataSet ds = new DataSet();
        slda.Fill(ds);
        User[] array = new User[ds.Tables[0].Rows.Count];
        int index = 0;
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            array[index] = new User(this,row);
            index++;
        }
        return array;

但是沿着“@search”行的错误不是一个正确的列名称“或类似的东西.如果我使用一个常量的列名,并且仅使用参数的数据可以工作,但是当我需要通过不同的列名搜索时,我不想创建10个不同的命令.

这里有什么问题?

解决方法

通常,像列名(或表名)这样的事情不能被参数化 – 而且有不同索引的事实意味着它将在内部必须是一个不同的计划.所以你必须使用连接 – 但要小心列出已知的列名以防止sql注入:
SQLiteCommand cmd = new SQLiteCommand(@"
    SELECT [ID],[email],[serializedata],[restrictions]
    FROM " + whiteListedUserTable + @"
    WHERE [" + whiteListedColumnName + @"] = @searchparam",SQLConnection);

    cmd.Parameters.Add(new SQLiteParameter("@searchparam"));
    ...
    Command.Parameters["@searchparam"].Value = searchdata;

(编辑:李大同)

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

    推荐文章
      热点阅读