我正在尝试使用Dapper将整数列表插入临时表中。我根据此堆栈溢出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插入此列表?
答案 0 :(得分:0)
您可以通过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项。