学习笔记之数据批量导入(二)

          由于近期在研究数据的批量导入,为了提高程序效率,我们使用SqlBulkCopy会使程序效率得到极大提高,但今天我们这里讨论的不是SqlBulkCopy的使用,如需了解SqlBulkCopy,请查看我的另一篇文章:学习笔记之向数据库批量插入数据,今天主要要说的是我在做数据从一张表导入另一张表时从数据库读取数据速度的问题。

数据库表:

使用SqlDataReader和SqlDataAdapter读取数据 (表中有100000条数据)

View Code
 1  static void Main(string[] args)
 2         {
 3             string sql = "select * from News";
 4             DateTime t5 = DateTime.Now;
 5             DataTable dt1 = GetTableReader(sql);
 6             DateTime t6 = DateTime.Now;
 7 
 8             DateTime t3 = DateTime.Now;
 9             DataTable dt = GetTable(sql);
10             DateTime t4 = DateTime.Now;
11 
12             dt.TableName = "News2";
13             dt.Columns["newsId"].ColumnName = "Id";
14             dt.Columns["newsName"].ColumnName = "Content";
15             dt.Columns["newsTime"].ColumnName = "Date";
16             Console.WriteLine("SqlDataReader 所用时间:" + (t6 - t5).TotalSeconds);
17             Console.WriteLine("SqlDataAdapter 所用时间:" + (t4 - t3).TotalSeconds);
18                                 Console.ReadKey();
19         }
20 
21   public static DataTable GetTableReader(string SQLString)
22         {
23             string connectionString = "Server=GOUMINGHON;database=Test2;uid=sa;pwd='12345678'";
24             using (SqlConnection connection = new SqlConnection(connectionString))
25             {
26                 DataTable dt = new DataTable();
27                 try
28                 {
29                     connection.Open();
30                     SqlCommand cmd = new SqlCommand(SQLString, connection);
31                     SqlDataReader reader = cmd.ExecuteReader();
32                     //dt.Load(reader);//加入这条语句返回datatable效率没有SqlDataAdapter高
33                 }
34                 catch (System.Data.SqlClient.SqlException ex)
35                 {
36                     throw new Exception(ex.Message);
37                 }
38                 return dt;
39             }
40         }
41 
42 public static DataTable GetTable(string SQLString)
43         {
44             string connectionString = "Server=GOUMINGHON;database=Test2;uid=sa;pwd='12345678'";
45             using (SqlConnection connection = new SqlConnection(connectionString))
46             {
47                 DataTable dt = new DataTable();
48                 try
49                 {
50                     connection.Open();
51                     SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
52                     command.Fill(dt);
53                 }
54                 catch (System.Data.SqlClient.SqlException ex)
55                 {
56                     throw new Exception(ex.Message);
57                 }
58                 return dt;
59             }
60         }

结果:

     很明显 SqlDataReader 的读取速度更快,那么,我就想:如果能将SqlDataReader读取的数据首先用DataTable保存起来,是否比SqlDataAdapter效率更高呢?

于是,在GetTableReader(string SQLString)中加入一句:dt.Load(reader);(上面代码中注释的)将读出来的数据放入dt中,再次运行项目得出以下结果:

    很显然和上面的结果是相反的,所以 SqlDataReader只适合读取数据,如果在项目中我们只是读取数据而不做其他操作,那么用 SqlDataReader效率更高,而要对读取的数据进行操作,那么最好还是选取SqlDataAdapter,效率更高。

posted @ 2012-10-13 11:15  猿来似梦  阅读(143)  评论(0)    收藏  举报