否定DataSet,那就使用DataReader来实现吧,这样内存中只会存放当前一条记录,而且DataReader是向后只读的,速度很快,把每读出来的记录Insert到Sql中,这样速度还是和使用DataAdapter差不多,大概能快那么一点。
1
public
void
InsertIIM(OleDbTransaction tIfx,SqlTransaction tSql)
2 {
3 //string strSql = "select * from IIM where serialcolumn not in (select pk from tabdtsc where tab='IIM')";
4 string strSql = "select * from IIM ";
5
6 OleDbCommand olecmd = new OleDbCommand(strSql,this.cnnIfx,tIfx);
7
8 System.Data.OleDb.OleDbDataReader oledr;
9 oledr = olecmd.ExecuteReader();
10
11 SqlCommand cmd = new SqlCommand();
12 cmd.Transaction = tSql;
13 cmd.Connection = this.cnn;
14
15 cmd.CommandText = "truncate table IIM ";
16 cmd.ExecuteNonQuery ();
17
18 string strIntSql = "";
19 object[] objColumn = new object[oledr.FieldCount];
20 while (oledr.Read())
21 {
22 strIntSql ="insert into iim values(";
23 oledr.GetValues(objColumn);
24 for(int i=0;i<objColumn.Length-1;i++)
25 {
26 if(objColumn[i].GetType().ToString()=="System.DBNull")
27 strIntSql+=" null,";
28 else
29 strIntSql+="'"+objColumn[i].ToString()+"',";
30 }
31
32
33 if(objColumn[objColumn.Length-1].GetType().ToString()=="System.DBNull")
34 strIntSql+=" null)";
35 else
36 strIntSql+="'"+objColumn[objColumn.Length-1].ToString()+"')";
37
38 cmd.CommandText = strIntSql;
39 cmd.ExecuteNonQuery();
40 }
41 oledr.Close();
42 }
2 {
3 //string strSql = "select * from IIM where serialcolumn not in (select pk from tabdtsc where tab='IIM')";
4 string strSql = "select * from IIM ";
5
6 OleDbCommand olecmd = new OleDbCommand(strSql,this.cnnIfx,tIfx);
7
8 System.Data.OleDb.OleDbDataReader oledr;
9 oledr = olecmd.ExecuteReader();
10
11 SqlCommand cmd = new SqlCommand();
12 cmd.Transaction = tSql;
13 cmd.Connection = this.cnn;
14
15 cmd.CommandText = "truncate table IIM ";
16 cmd.ExecuteNonQuery ();
17
18 string strIntSql = "";
19 object[] objColumn = new object[oledr.FieldCount];
20 while (oledr.Read())
21 {
22 strIntSql ="insert into iim values(";
23 oledr.GetValues(objColumn);
24 for(int i=0;i<objColumn.Length-1;i++)
25 {
26 if(objColumn[i].GetType().ToString()=="System.DBNull")
27 strIntSql+=" null,";
28 else
29 strIntSql+="'"+objColumn[i].ToString()+"',";
30 }
31
32
33 if(objColumn[objColumn.Length-1].GetType().ToString()=="System.DBNull")
34 strIntSql+=" null)";
35 else
36 strIntSql+="'"+objColumn[objColumn.Length-1].ToString()+"')";
37
38 cmd.CommandText = strIntSql;
39 cmd.ExecuteNonQuery();
40 }
41 oledr.Close();
42 }
1
Thread[] m_thdX
=
new
Thread[
5
];
2
3 m_thdX[ 0 ] = new Thread( new ThreadStart(InsertFSO));
4 m_thdX[ 0 ].Start();
5
6 m_thdX[ 1 ] = new Thread( new ThreadStart(InsertILI));
7 m_thdX[ 1 ].Start();
8
9 m_thdX[ 2 ] = new Thread( new ThreadStart(InsertMBM));
10 m_thdX[ 2 ].Start();
11
12 m_thdX[ 3 ] = new Thread( new ThreadStart(InsertIIM));
13 m_thdX[ 3 ].Start();
14
15 m_thdX[ 4 ] = new Thread( new ThreadStart(InsertITH));
16 m_thdX[ 4 ].Start();
17
18 m_thdX[ 0 ].Join();
19 m_thdX[ 1 ].Join();
20 m_thdX[ 2 ].Join();
21 m_thdX[ 3 ].Join();
22 m_thdX[ 4 ].Join();
2
3 m_thdX[ 0 ] = new Thread( new ThreadStart(InsertFSO));
4 m_thdX[ 0 ].Start();
5
6 m_thdX[ 1 ] = new Thread( new ThreadStart(InsertILI));
7 m_thdX[ 1 ].Start();
8
9 m_thdX[ 2 ] = new Thread( new ThreadStart(InsertMBM));
10 m_thdX[ 2 ].Start();
11
12 m_thdX[ 3 ] = new Thread( new ThreadStart(InsertIIM));
13 m_thdX[ 3 ].Start();
14
15 m_thdX[ 4 ] = new Thread( new ThreadStart(InsertITH));
16 m_thdX[ 4 ].Start();
17
18 m_thdX[ 0 ].Join();
19 m_thdX[ 1 ].Join();
20 m_thdX[ 2 ].Join();
21 m_thdX[ 3 ].Join();
22 m_thdX[ 4 ].Join();
补充一点,不要忘记使用lock(this),来进行同步。
搞定,不过最后不要忘记关闭informix的连接。