使用dapper将列表插入临时表

ddrv8njm  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(904)

我正在尝试使用dapper将整数列表插入到临时表中。我根据这个堆栈溢出问题的选定答案编写了查询。但是,运行查询时出现语法错误。
代码:

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插入此列表?

0s0u357o

0s0u357o1#

您可以通过dapper的多次执行命令特性来完成这一点。
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,它可以在一个数据库中插入1000个项目 INSERT 声明。

相关问题