现在的位置: 首页 > 综合 > 正文

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

2012年03月10日 ⁄ 综合 ⁄ 共 1441字 ⁄ 字号 评论关闭

导入大量 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;

抱歉!评论已关闭.