我在C#中使用Dapper。我正在尝试动态构建查询,涉及的列和参数,但出现错误。这是示例代码:
private List<string> columns = new List<string>();
private List<string> values = new List<string>();
Dictionary<string, string> parameters = new Dictionary<string, string>();
// We dynamically determine columns to add:
columns.Add("AssetName");
values.Add("@AssetName");
parameters.Add("@AssetName", "test value");
string sql = @$"insert into foo ({String.Join(",", columns)}) values({String.Join(",", values)});";
var params = new DynamicParameters(params);
connectionObject.Execute(sql, params);
我得到的错误是:必须声明标量变量“ @AssetName”。
我哪里出错了?
如果我将执行行替换为:
connectionObject.Execute(sql, new { AssetName = "test" });
然后查询运行无错误。
注意:在字典中,我测试了键中是否有@。
我发现了问题。词典的值必须是object类型:
Dictionary<string, string> parameters = new Dictionary<string, object>();
而且,字典键似乎不需要前导“ @”。