如何使用参数占位符将一个列名值作为SQL参数传递?
目标是让这个东西发挥作用。
var sql = "SELECT * FROM Condos WHERE @0 LIKE @1";
var sqlData = db.Query(sql,choice,"%"+searchString+"%");
choice
是一个变量,它将存储column name
。
@0
是一个column name
(我没有成功地把它作为一个参数来传递)。
@1
是一个search string
(而且我对它没有意见)
已经阅读并尝试了很多东西。
下面一个没有抛出任何错误,但没有带来任何数据
var sql = "SELECT * FROM Condos WHERE @0 LIKE @1";
var sqlData = db.Query(sql,choice,"%"+searchString+"%");
下面一个抛出Column name not valid = '@0'
var sql = "SELECT * FROM Condos WHERE [@0] LIKE @1"
var sqlData = db.Query(sql,choice,"%"+searchString+"%");
下面一个抛出Column name not valid = 'choice'
。
var sql "SELECT * FROM Condos WHERE choice LIKE @0");
var sqlData = db.Query(sql,"%"+searchString+"%");
下面一个抛出的Must declare scalar variable "@choice"
var sql "SELECT * FROM Condos WHERE @choice LIKE @0");
var sqlData = db.Query(sql,"%"+searchString+"%");
下面一个没有抛出任何错误,但没有带来任何数据
var sql = "SELECT * FROM Condos WHERE '@choice' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");
下面一个没有抛出任何错误,但没有带来任何数据
var sql = "SELECT * FROM Condos WHERE '@choice' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");
下面一个没有抛出任何错误,但没有带来任何数据
var sql = "SELECT * FROM Condos WHERE '"+choice+"' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");
下面一个。巨大的碰撞
var sql = "SELECT * FROM Condos WHERE '"+@choice+"' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");
下面一个抛出Column name not valid = 'NameShort'
。
这正是正确的列名
var sql = "SELECT * FROM Condos WHERE ['"+choice+"'] LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");
下面一个。巨大的碰撞
var sql = "SELECT * FROM Condos WHERE ['"+@choice+"'] LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");
HELP !!!!!!!!!!!!!!
简短的回答是,你不能这样做;参数只支持 值 ,不支持 列名 。
你要么像Richard所说的那样直接插入文本(不管是在代码中还是通过使用SQL Server exec()函数),要么使用某种库(如LINQ),让你动态地构建查询,然后将其转换为文本表示。
如果你走直接插入文本的路线, 要非常确定你不允许直接插入用户的输入;自己做一些翻译 以避免SQL注入攻击。