c# - 使用 Dapper 将列表插入临时表
问题描述
我正在尝试使用 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 插入此列表?
解决方案
您可以通过 Dapper 的多次执行命令功能来完成此操作。
SQL 查询必须只包含您想要重复的命令,并且参数(传递给 Dapper)必须是一个IEnumerable
对象,其中每个对象都有一个以您正在使用的参数命名的属性。最后,在插入(而不是检索)值时使用Execute
(not ):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 的社区扩展,例如可以在一个语句中插入 1000 个项目的BulkInsert 。INSERT
推荐阅读
- javascript - 为什么我需要一个聪明的运算符来访问最后一个数组元素?
- python - 字典值搜索
- search - CKAN:在搜索框中指定标签?
- c# - 如何在 C# 中绑定到 Grid ColumnDefinition Width
- android - 创建 APK 问题 React Native with Expo
- jquery - 根据类更改工具提示颜色
- python - 如何在 VSCode 中启用 Pylint?
- java - 标记一个 fun / 属性以仅在 Kotlin / Java 中使用
- sql - 如何克服 HANA 表 UDF 不支持的 grouping() 函数?
- azure - 将 xamarin 中的本地数据库与 azure 表存储同步