我有一个History
表,其中有列C0, C1, C2, C3, TimeStamp
。
我想根据输入内容以及相应的TimeStamp
选择特定的列。
让channelId
为“ C2”
var context = new DalModels.DbContext();
string command = "SELECT TimeStamp, @channelId FROM dbo.History";
var user = new SqlParameter("@channelId", channelId);
var result = context.History.FromSql(command, user).ToList();
但我没有得到结果,而是出现异常:
未为“ h”的第2列指定列名。
无效的列名“ C0”。
无效的列名“ C1”。
无效的列名“ C2”。
无效的列名“ C3”。
无效的列名“ TimeStamp”。
答案 0 :(得分:6)
参数化查询不能用于动态列名。参数仅在表达式的右侧使用,例如_regionManager.RequestNavigate(RegionsNames.MainSections, "somethingelse_rootview");
之后。
要解决您的问题,请将查询转换为使用变量。
=
请注意,var context = new DalModels.DbContext();
string command = $"SELECT TimeStamp, {channelId} FROM dbo.History";
var result = context.History.FromSql(command, user).ToList();
用于string interpolation
然后,您必须将用户可以传递给该字段的值列入白名单,以防止SQL注入攻击。