【发布时间】:2015-02-07 12:13:52
【问题描述】:
我有一个方法可以从 UI 中获取多个图像并将它们存储在缓存中,完成后它会调用一个方法,然后引用缓存将图像拉出然后将它们传递给数据库,目前这个insert 语句当前一次只执行一个,因此对于一个用户来说,它可能对数据库进行 7 次点击。
我想要实现的是这样的,在 SQL 中你会做(一次插入数据库中的多个项目)
insert into table1 (First,Last)
values
('Fred','Smith'),
('John','Smith'),
('Michael','Smith'),
('Robert','Smith');
我的代码目前看起来像这样
public void SaveImages(List<Images> Images, Int64 userId)
{
var extension = Images.Aggregate(string.Empty, (current, item) => current + string.Format("({0},{1},{2},{3},{4},{5}),", userId, item.ImageName, item.ImageUrl, 1, DateTime.Now, null));
}
一旦完成扩展看起来像这样
(1253,xkvkvy4ldmfbhlmftqsc,https://res.cloudinary.com/dncu6pqpm/image/upload/v1423309462/rfefef.jpg,1,07/02/2015 11:45:29,),
(1253,pa0niomwvyzl47qjlxna,https://res.cloudinary.com/dncu6pqpm/image/upload/v1423309471/iuytre.jpg,1,07/02/2015 11:45:29,),
(1253,mymvektwddgco9nvbaap,https://res.cloudinary.com/dncu6pqpm/image/upload/v1423309479/sdfgh.jpg,1,07/02/2015 11:45:29,),
(1253,fxlftcx9jgrs9c7sjnv4,https://res.cloudinary.com/dncu6pqpm/image/upload/v1423309489/98iuiu.jpg,1,07/02/2015 11:45:29,),
我调用插入语句并传入扩展名
var query = @"
INSERT INTO [User].Images
(UserId, FileName, ImageUrl, Active, CreatedDate, DeletedDate)
VALUES
" + extension;
sqlCon.Query(query);
但由于以下原因而失败
The label 'https' has already been declared. Label names must be unique within a query batch or stored procedure.
我已经用谷歌搜索了这个错误,但我没有收到任何好的解决方案,因此我在这里问。
【问题讨论】:
-
首先,您使用的是什么 ORM?
Query不是 EF、NH 或 Linq to SQL 的一部分。其次,问题是您使用字符串连接而不是参数化查询或 ORM 的插入方法。不管你怎么逃,你在创建这样的sql语句时总是会遇到麻烦。
标签: c# asp.net-mvc-5 sql-insert