如何使用参数占位符将列名值作为SQL参数传递?
目标是使此工作正常进行:
var sql = "SELECT * FROM Condos WHERE @0 LIKE @1"; var sqlData = db.Query(sql,choice,"%"+searchString+"%");
choice 是一个变量,它将存储 column name
choice
column name
@0是column name(并且我没有成功将其作为参数传递)
@0
@1是一个search string(我对此没有问题)
@1
search string
已经阅读并尝试了很多东西:
低于1不会引发任何错误,但不会带来任何数据
低于一投 Column name not valid = '@0'
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'
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"
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+"%");
下一个:BIG CRASH
var sql = "SELECT * FROM Condos WHERE '"+@choice+"' LIKE @0"; var sqlData = db.Query(sql,"%"+searchString+"%");
低于一投 Column name not valid = 'NameShort'
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+"%");
帮助 !!!!!!!!!!!!!!
简短的答案是你不能;参数仅支持 值 ,不支持 列名 。
您必须像Richard所说的那样依靠直接文本插入(无论是在代码中发生还是通过使用SQL Server exec()函数发生),或者使用某种可以使您构造查询的库(如LINQ)动态地,然后将其转换为文本表示形式。
如果您使用直接文本插入路线,请 确保您不允许插入直接用户输入。 自己进行 某种翻译 以避免SQL Injection攻击。