如何使用参数占位符将列名值作为 SQL 参数传递?
目标是让它发挥作用:
var sql = "SELECT * FROM Condos WHERE @0 LIKE @1";
var sqlData = db.Query(sql,choice,"%"+searchString+"%");
choice
是一个变量,用于存储列名称
@0
是一个列名称
(我没有成功地将它作为参数传递)
@1
是一个搜索字符串
(我对此没有任何问题)
已经阅读并尝试了很多东西:
下面的不会抛出任何错误,但不会带来任何数据
var sql = "SELECT * FROM Condos WHERE @0 LIKE @1";
var sqlData = db.Query(sql,choice,"%"+searchString+"%");
下面抛出列名称无效 = '@0'
var sql = "SELECT * FROM Condos WHERE [@0] LIKE @1"
var sqlData = db.Query(sql,choice,"%"+searchString+"%");
下面抛出列名无效='choice'
var sql "SELECT * FROM Condos WHERE choice LIKE @0");
var sqlData = db.Query(sql,"%"+searchString+"%");
下面一个抛出必须声明标量变量“@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+"%");
下面抛出列名称无效 = '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 注入(inject)攻击。
关于sql - 如何使用占位符将列名值作为 SQL 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537629/