XML Bulkload 在.NET环境下运行的注意点

导入大量 XML 数据到SQL Server的时候,我们常会用到 XML Bulkload。本人前不久在将VB写的应用程序迁移到ASP.Net的时候遇到了这样一个错误:
接口 SQLXMLBULKLOADLib.ISQLXMLBulkLoad 的 QueryInterface 失败。

程序代码如下:

1           private   void  Page_Load( object  sender, System.EventArgs e)
2          {
3              SQLXMLBULKLOADLib.SQLXMLBulkLoad3Class objXBL  =   new  SQLXMLBULKLOADLib.SQLXMLBulkLoad3Class();
4              objXBL.ConnectionString  =   " Provider=sqloledb;server=(local);database=Digi;uid=sa;pwd= "
5              objXBL.ErrorLogFile  =   " d:\error.log " ;
6              objXBL.KeepIdentity  =   false
7              objXBL.Execute( " d:\\test.xsd " " d:\\test.xml " ); 
8          }

开始以为是语法有问题,经调试发现在.Net的Windows应用程序中却运行正常。这才发现原来是Thread的问题。Bulkload能够在VB以及.Net的Windows应用程序下运行正常的原因在于它们默认是以单线程运行的。

于是改写程序:
 1           private   void  Page_Load( object  sender, System.EventArgs e)
 2          {
 3              Thread bulkLoad  =   new  Thread(  new  ThreadStart(BulkIt) ); 
 4              bulkLoad.ApartmentState  =  ApartmentState.STA; 
 5              bulkLoad.Start();
 6          }
 7 
 8 
 9           public   void  BulkIt() 
10          { 
11              SQLXMLBULKLOADLib.SQLXMLBulkLoad3Class objXBL  =   new  SQLXMLBULKLOADLib.SQLXMLBulkLoad3Class();
12              objXBL.ConnectionString  =   " Provider=sqloledb;server=(local);database=Digi;uid=sa;pwd= "
13              objXBL.ErrorLogFile  =   " d:\error.log " ;
14              objXBL.KeepIdentity  =   false
15              objXBL.Execute( " d:\\test.xsd " " d:\\test.xml " );  
16          } 

运行正常!当然别忘了在前面加上:
using System.Threading;

你可能感兴趣的:(.net)