小编典典

如何使用占位符将列名值作为SQL参数传递

sql

如何使用参数占位符将列名值作为SQL参数传递?

目标是使此工作正常进行:

var sql = "SELECT * FROM Condos WHERE @0 LIKE @1";
var sqlData = db.Query(sql,choice,"%"+searchString+"%");

choice 是一个变量,它将存储 column name

@0column name(并且我没有成功将其作为参数传递)

@1是一个search string(我对此没有问题)

已经阅读并尝试了很多东西:

低于1不会引发任何错误,但不会带来任何数据

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+"%");

低于1不会引发任何错误,但不会带来任何数据

var sql = "SELECT * FROM Condos WHERE '@choice' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");

低于1不会引发任何错误,但不会带来任何数据

var sql = "SELECT * FROM Condos WHERE '@choice' LIKE @0";
var sqlData = db.Query(sql,"%"+searchString+"%");

低于1不会引发任何错误,但不会带来任何数据

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'

这正是正确的列名

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+"%");

帮助 !!!!!!!!!!!!!!


阅读 247

收藏
2021-04-14

共1个答案

小编典典

简短的答案是你不能;参数仅支持 ,不支持 列名

您必须像Richard所说的那样依靠直接文本插入(无论是在代码中发生还是通过使用SQL Server
exec()函数发生),或者使用某种可以使您构造查询的库(如LINQ)动态地,然后将其转换为文本表示形式。

如果您使用直接文本插入路线,请 确保您不允许插入直接用户输入。 自己进行 某种翻译 以避免SQL Injection攻击。

2021-04-14