批量导入DataTable到SQL Server中

来源:互联网 发布:新生报到流程优化 编辑:程序博客网 时间:2024/05/01 16:25

使用ASP.NET中的SqlBulkCopy完成DataTable批量导入到数据库中。

SQLBulkCopy,用于数据库之间大批量的数据传递。通常用于新,旧数据库之间数据的更新。即使表结构完全不同,也可以通过字段间的对应关系,顺利的将数据导过来。

首先,SQLBulkCopy需要2个连接,分别连接到不同的旧表所在的数据库,新表所在的数据库。如果是同一个数据库,就可以用同一个SqlConnection对象。

其次,读出需要的数据存在DataTable。

最后,设定对应关系,设定目标表名,写入。


具体代码

   public Boolean ceshi (  )               {               //1.连接数据库的语句               SqlConnection strConnEvaluate = new SqlConnection ( ConfigurationManager.ConnectionStrings["strConnEvaluate"].ConnectionString );               //打开连接               strConnEvaluate.Open ( );               //2.创建事物               SqlTransaction sqlTran = strConnEvaluate.BeginTransaction ( IsolationLevel.ReadCommitted );               //3.获得dtStuTeaCourse               DataTable dt = teacherCourseStudentLinkDAL.GetStuTeachCourse ( );               try                    {                    SqlBulkCopy oBC1 = new SqlBulkCopy ( strConnEvaluate, SqlBulkCopyOptions.Default, sqlTran); //实例化批量添加记录的类                             oBC1.BatchSize = dt.Rows.Count; //需要添加的记录数量                    //oBC1.BulkCopyTimeout = 300; //设置添加数据的最长时间                    oBC1.DestinationTableName = "TA_TeacherCourseStudentLink"; //将数据添加到数据库的TA_TeacherCourseStudentLink表中                    #region                         oBC1.ColumnMappings.Add ( "CollegeID", "CollegeTeacherID" ); //第一个参数是源数据列,第二个是目标数据库数据列                                                             oBC1.ColumnMappings.Add ( "CollegeName", "CollegeTeacherName" );                         oBC1.ColumnMappings.Add ( "TeacherID", "TeacherID" );                         oBC1.ColumnMappings.Add ( "TeacherName", "TeacherName" );                         oBC1.ColumnMappings.Add ( "CourseID", "CourseID" );                         oBC1.ColumnMappings.Add ( "CourseName", "CourseName" );                         oBC1.ColumnMappings.Add ( "StudentID", "StudentID" );                         oBC1.ColumnMappings.Add ( "StudentName", "StudentName" );                         oBC1.WriteToServer ( dt );//dtAddData是源数据表                    sqlTran.Commit ( );//提交事务                    return true;                    }               catch (Exception e)                    {                    sqlTran.Rollback ( );//出现错误事务回滚                    return false;                    }               finally                    {                    strConnEvaluate.Close ( );//关闭连接                    }               }

但是有一个问题需要注意:导入的DataTable与数据库中表的列数量一定要相同,如果不相同这样子添加是不正确的。

对于这种情况,可以使用remove()方法做DataTable做一些修改从而达到和数据库中表中列的数量相同。


0 0
原创粉丝点击