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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |