2010-07-14 48 views
1

我有一个应用程序,用户可以上传文件并将文件与项目关联。这些项目可以复制。下面是一个对象的例子:批量插入或使用C#和SQL服务器一次加载大量数据的另一种方法?

Public class Project{ 
    Int ProjectId{get; set;} 
    string ProjectName{get;set;} 
    List<int> FileIds{get;set} 
} 

当我去复制的项目,比如,什么是相同的文件与新项目关联的最好方法?我有两个表格用于项目和文件。我有一个关系表,它具有项目ID和文件ID的外键。当我创建一个新的项目ID时,我想将文件ID批量插入到关系表中。迭代遍历列表和惰性列表是否同样好?还是有更好的方法?

+0

我没有找到这个帖子:http://stackoverflow.com/questions/682015/whats-the-best-way-to-bulk-database-inserts - 从-C – DDiVita 2010-07-14 19:30:58

+0

你能否澄清一下,你从你的项目表(和/或文件表)回项目表中复制数据,但修改的ID? – CodingGorilla 2010-07-14 19:32:18

+0

我正在复制数据,因此将其视为整个新记录。当项目重复时,将使用新的ID创建新项目。 – DDiVita 2010-07-14 19:36:36

回答

1

如果你复制的项目是已经在SQL服务器迄今为止最有效的事情是在SQL服务器做重复,只是一个简单的:

INSERT INTO Files (ProjectId,FileId) SELECT 2 As ProjectId, FileId FROM Files WHERE ProjectId = 1

凡新建项目是专案编号= 2,旧的是专案编号= 1

0

要么使用SqlBulkCopy的或表值参数存储过程。

+0

我该如何将它应用到通用列表。我可以通过列表或将其转换,以便我可以使用SQLBulkCopy? – DDiVita 2010-07-14 19:37:22

+0

如果您使用SQL2008,我一定会查看用户定义的表类型。将您的列表到DataTable,添加型SqlDbType.Structured的SqlParamater做你插入的SP。这是一个伟大的工具,在你的技能阿森纳 – 2010-07-14 19:57:32

+0

我希望我使用sql2008;)我们仍然在2005年 – DDiVita 2010-07-14 21:06:42