Tag: sqlbulkcopy

如何将gridview行添加到数据表?

我有一个gridview,它将包含一些’n’个行….现在我想将gridview的所有行添加到一个数据表中,该数据表将用于批量复制操作… 我找到了这个http://www.codeproject.com/KB/aspnet/GridView_To_DataTable.aspx 但我希望我的gridview的所有列都添加到数据网格的数据行中http://img85.imageshack.us/img85/4044/gridp.jpg 我想在提交时将gridview转换为数据表….任何建议…… 编辑: 下面的答案有效,我也找到了答案…… DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn(“EmpId”, typeof(Int64))); dt.Columns.Add(new DataColumn(“FromDate”, typeof(DateTime))); dt.Columns.Add(new DataColumn(“ToDate”, typeof(DateTime))); dt.Columns.Add(new DataColumn(“DaysPresent”, typeof(double))); dt.Columns.Add(new DataColumn(“OpeningAdvance”, typeof(double))); dt.Columns.Add(new DataColumn(“AdvanceDeducted”, typeof(double))); dt.Columns.Add(new DataColumn(“RemainingAdvance”, typeof(double))); dt.Columns.Add(new DataColumn(“SalaryGiven”, typeof(double))); dt.Columns.Add(new DataColumn(“CreatedDate”, typeof(DateTime))); foreach (GridViewRow row in gridEmployee.Rows) { if (row.RowType == DataControlRowType.DataRow) { DataRow dr = dt.NewRow(); dr[“EmpId”] = […]

带有父/子关系的SQL批量插入,是否保留了订单?

与下面提到的其他问题类似,我有两个表格结构: create table parent ( recno int identity(1,1) primary key not null, groupCode int, parentdata varchar(80) ); create table child ( parentrecno int not null, childdata varchar(80) ) 我需要在这些表中快速插入几十万个记录 – 这些表包含数百万个与此插入无关的其他记录,并且永远不会安静。 由于父/子的性质,它不适合SqlBulkCopy (似乎)。 在使用带有INSERT SqlCommand C#中,我插入了大约400-500条记录/秒,这有点太慢了。 伪代码: foreach(Record r in parentRecords) { Insert Fields from r into SqlCommand Parameters but not “recno” Call ExecuteScalar to […]

SQLBulkCopy或批量插入

我有大约6500个文件,总和大约17 GB的数据,这是我第一次移动我称之为大量数据的东西。 数据位于网络驱动器上,但各个文件相对较小(最大7 MB)。 我正在用C#编写程序,如果我使用BULK INSERT而不是SQLBulkCopy,我想知道是否会注意到性能上的显着差异。 服务器上的表也有一个额外的列,所以如果我使用BULK INSERT,我将不得不使用格式文件,然后为每一行运行UPDATE。 我是新来的论坛,所以如果有更好的方式来问这个问题,请随意提及。

SQLBulkCopy为所有列插入一个具有NULL值的新行

我有这个代码工作正常,并将Excel数据加载到SQL表中。 唯一的问题是它还为所有列插入一个具有NULL值的新行。 using (OleDbConnection excel_con = new OleDbConnection(conString)) { excel_con.Open(); string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][“TABLE_NAME”].ToString(); DataTable dtExcelData = new DataTable(); using (OleDbDataAdapter oda = new OleDbDataAdapter(“SELECT * FROM [” + Path.GetFileName(excelPath) + “]”, excel_con)) { oda.Fill(dtExcelData); } excel_con.Close(); using (SqlConnection con = new SqlConnection(consString)) { using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) { //Set the database […]

SQL Bulkcopy YYYYMMDD问题

我使用SQL Bulkcopy在asp.net 3.5中使用C#进行String to Date转换问题 我读了一个大的CSV文件(带有CSV阅读器 )。 其中一个读取的字符串应加载到SQL Server 2008 Date列中。 如果文本文件包含例如字符串’2010-12-31’,则SQL Bulkcopy会将其毫无问题地加载到Date列中。 但是,如果字符串是’20101231’,我会收到错误: 数据源中String类型的给定值无法转换为指定目标列的类型日期 该文件包含8000万条记录,因此我无法创建数据表…. SqlBulkcopy Columnmappings等都可以。 也改为DateTime没有帮助。 我试过了 SET DATEFORMAT ymd; 但这没有用。 任何想法如何告诉SQL Server接受这种格式? 否则我将在CSV阅读器中创建自定义修复,但我更喜欢SQL中的一些东西。 更新后面的两个答案,我正在使用这样的SQL批量复制(在另一个问题的Stackoverflow上提出): CSV阅读器(请参阅上面的codeproject上的链接)返回字符串值(非强类型)。 CSVreader实现了System.Data.IDataReader,所以我可以这样做: using (CsvReader reader = new CsvReader(path)) using (SqlBulkCopy bcp = new SqlBulkCopy(CONNECTION_STRING)) { bcp.DestinationTableName = “SomeTable”; // columnmappings bcp.WriteToServer(reader); } 来自iDataReader的所有字段都是字符串,所以我不能使用c#方法,除非我在CSVreader中改变了很多 因此,我的问题与如何在C#中修复它无关,我可以这样做,但我想阻止它。 这很奇怪,因为如果你在sql中做了类似的东西 update set […]

如何使用SqlBulkCopyColumnMappingCollection?

我想通过参数传递特定数据,制作一个可用于所有批量插入的SqlBulkCopy方法。 现在我需要对其中一些进行映射。 我不知道如何制作SqlBulkCopyColumnMappingCollection,因为那是我计划传递映射集合并使用它。 但是我不知道如何制作它。 我不能成为它的新对象。 这就是我现在拥有的。 如何添加它做映射把它传递进去? public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize) { // Get the DataTable DataTable dtInsertRows = dataTable; using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)) { sbc.DestinationTableName = DestinationTbl; // Number of records to be processed in one go sbc.BatchSize = batchSize; // Finally write to server sbc.WriteToServer(dtInsertRows); } […]

SqlBulkCopy会自动启动事务吗?

我通过SqlBulkCopy插入数据,如下所示: public void testBulkInsert(string connection, string table, DataTable dt) { using (SqlConnection con = new SqlConnection(connection)) { con.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con)) { bulkCopy.DestinationTableName = table; bulkCopy.WriteToServer(dt); } } } 这是否会自动包装在SQL事务中,以便在出现问题时,数据库的一半将保持与批量插入开始之前相同的状态? 或者将插入一半的数据? 即我是否有必要明确调用con.BeginTransaction 或者,如果我调用SqlBulkCopy的构造函数来获取字符串,那么这是一种更好的方法来使它在事务中发生吗? public void testBulkInsert(string connection, string table, DataTable dt) { using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = table; […]

批量插入在Azure SQL Server中无法正常工作

我无法使用C#webapi将大量数据插入Azure SQL Server数据库 考虑 我想在SQL中插入60K>数据。 在我的本地SQL服务器中没有问题,但在Azure SQL中它的连接超时 我的方法:(所有都在本地sql server中工作,但不在Azure sql server中) 1)尝试使用EF逐个插入记录(10000次约10分钟,大部分超时) 2)尝试使用批量插入扩展和EF 3)在SqlBulkCopy中尝试 4)尝试增加连接字符串中的连接超时 5)尝试在Dbcontext中增加命令时间。 exceptionStackTrace Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. System.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is […]

可以在SQL BulkCopy之后返回PrimayKey ID吗?

我正在使用C#并使用SqlBulkCopy。 我有一个问题。 我需要将质量插入到一个表中,然后将另一个质量插入到另一个表中。 这2个具有PK / FK关系。 Table A Field1 -PK auto incrementing (easy to do SqlBulkCopy as straight forward) Table B Field1 -PK/FK – This field makes the relationship and is also the PK of this table. It is not auto incrementing and needs to have the same id as to the row in Table […]

SqlBulkCopy和entity framework

我目前的项目包括3个标准层:数据,业务和演示。 我想使用数据实体来满足我的所有数据访问需求。 应用程序的部分function是需要将平面文件中的所有数据复制到数据库中。 该文件不是很大,所以我可以使用SqlBulkCopy。 我在.NET中找到了几篇关于SqlBulkCopy类用法的文章。 但是,所有文章都使用DataTable来来回移动数据。 有没有办法将数据实体与SqlBulkCopy一起使用,还是必须使用DataTables?