amp*_*ier 0 c# entity-framework-core
我有一张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();
Run Code Online (Sandbox Code Playgroud)
但是我没有得到结果,而是出现了一个例外:
没有为“ h”的列2指定列名。
无效的列名“ C0”。
无效的列名“ C1”。
无效的列名“ C2”。
无效的列名“ C3”。
无效的列名“ TimeStamp”。
参数化查询不能用于动态列名。参数只能在表达式的右侧使用,例如,在=。之后。
要解决您的问题,请将查询转换为使用变量。
var context = new DalModels.DbContext();
string command = $"SELECT TimeStamp, {channelId} FROM dbo.History";
var result = context.History.FromSql(command, user).ToList();
Run Code Online (Sandbox Code Playgroud)
注意$用于字符串插值
然后,您必须将用户可以传递给该字段的值列入白名单,以防止SQL注入攻击。
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |