【问题标题】:Inserting a list into temp table using Dapper使用 Dapper 将列表插入临时表
【发布时间】:2018-08-10 15:06:26
【问题描述】:

我正在尝试使用 Dapper 将整数列表插入到临时表中。我根据这个 Stack Overflow question 的选定答案编写了我的查询。但是,运行查询时出现语法错误。

代码:

List<int> lst = new List<int> {1, 2, 3, 4};
string queryString="CREATE TABLE #Temp (ListInt int)" 
                + " INSERT INTO #Temp (ListInt) VALUES (@Lst);";
dbConnection.Open();

dbConnection.Query(queryString, new {Lst = lst});

错误:

System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near ','.

如何使用 Dapper 插入此列表?

【问题讨论】:

  • 您的代码中的“lst”是什么?提供一个最小且完整的例子
  • lst 是一个列表

标签: c# mysql sql .net dapper


【解决方案1】:

您可以通过 Dapper 的 Execute a Command multiple times 功能完成此操作。

SQL 查询必须只包含您想要重复的命令,并且参数(传递给 Dapper)必须是对象的 IEnumerable,其中每个对象都有一个以您的参数命名的属性重新使用。最后,在插入(而不是检索)值时使用Execute(而不是Query):

List<int> lst = new List<int> {1, 2, 3, 4};
dbConnection.Open();
dbConnection.Execute("CREATE TABLE #Temp (ListInt int)");
dbConnection.Execute("INSERT INTO #Temp (ListInt) VALUES (@item);",
    lst.Select(x => new { item = x }));

请注意,如果您要插入数千个项目,INSERT 语句将对每个项目执行一次,这可能会非常慢。如果是这种情况,请调查 Dapper 的社区扩展,例如 BulkInsert,它可以在一个 INSERT 语句中插入 1000 个项目。

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2014-02-05
    • 1970-01-01
    • 2014-01-30
    • 2012-07-31
    相关资源
    最近更新 更多