当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否可以在SQLite查询中参数化表名和列名?》经验,为你挑选了1个好方法。

我试图在SQLite中使用C#执行参数化查询,我使用的方法就是创建一个静态命令.

        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个不同的命令,当我需要搜索不同的列名称.

这是什么问题?



1> Marc Gravell..:

像列名(或表名),一般的事情不会进行参数设置-而事实上,有不同的指数意味着它将是一个不同的计划内.所以,你将不得不使用拼接- 要小心白名单已知的列名,以防止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;

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有