批量导入DataTable到SQL Server中

使用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做一些修改从而达到和数据库中表中列的数量相同。


你可能感兴趣的:(系统,B/S,DataTable,批量导入数据库,SqlBulkCopy,评教系统)