C#中使用DTS来导入数据及相关问题

本文介绍如何使用MSSQL的DTS功能将Excel数据导入到Sql数据库,并通过C#程序进行控制。文章详细描述了创建DTS包的过程及在C#中调用的方法,同时还讨论了在数据导入过程中遇到的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

向Sql 中导入Excel数据时,使用MS SQL的DTS功能
可以很方便的导入,同时引用Dll文件,可以在程序中对导入过程进行控制。

创建DTS包的过程如下:
1。在SQL企业管理器中,工具菜单选数据转换服务,导入数据
按照它的图形化向导提示,可以一步步创建一个DTS包,可以选择保存在数据库。
2。在SQL企业管理器中,左边树形结构中选择 数据转化服务,本地包中
可以新建一个包,同样有图形化的界面建立包:拖一个Excel数据源,拖一个Sql数据源
然后在任务里选 数据转化任务,原数据选Excel源,目的选SQL,然后在转化的肩头上选属性
里面可以配置转化过程。注意带有主键的数据表,要把选项中 启用标示插入去掉


在C#里调用过程如下:
private void RunDTS()
2ExpandedBlockStart.gifContractedBlock.gif  dot.gif{
3InBlock.gif   DTS.Package2Class package = new Package2Class();
4InBlock.gif   object p = null;
5InBlock.gif   package.LoadFromSQLServer("ws-victor-03"nullnull, DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_UseTrustedConnection,
6InBlock.gif    nullnullnull"TestDTS"ref p);
7InBlock.gif   package.Connections.Item(1).DataSource = "dts.XLS";
8InBlock.gif   package.Execute();
9ExpandedBlockEnd.gif  }

现在项目中遇到问题:
1。插入数据时需要插入时间等Excel数据源中不存在的数据
2。Excel数据源中数据有的需要转化,像数值形,导入后变成了1。23131E12等形式
3。插入数据时需要从Sql中查询数据再插入

现在解决了第一条和第三条的一步分:
在上述配置 数据转化任务 时,

None.gif DTSDestination( " ICC " =  DTSSource( " SIM Number " );
None.gif    DTSDestination(
" IMSI " =  DTSSource( " IMSI " );
None.gif    DTSDestination(
" PIN1 " =  DTSSource( " PIN1 " );
None.gif    DTSDestination(
" PUK1 " =  DTSSource( " PUK1 " );
None.gif    DTSDestination(
" PIN2 " =  DTSSource( " PIN2 " );
None.gif    DTSDestination(
" PUK2 " =  DTSSource( " PUK2 " );
None.gif    DTSDestination(
" MSISDN " =  DTSSource( " MSISDN " );
None.gif    DTSDestination(
" Fax " =  DTSSource( " Fax " );
None.gif    DTSDestination(
" Data " =  DTSSource( " Data " );
None.gif    DTSDestination(
" Barring " =  DTSSource( " Barring " );
None.gif    DTSDestination(
" MailFormID " )   =  DTSGlobalVariables( " MailFromID " ).Value;
None.gif    DTSDestination(
" ReceiveDate " =   new  Date().getYear()  +   " - "   +   new  Date().getMonth()  +   " - "   +   new  Date().getDate();
None.gif    
return (DTSTransformStat_OK);

其中,MailFromID为全局变量,添加方法为包 菜单 属性里面选择全局变量,可在C#中对其进行赋值:

None.gif foreach (GlobalVariable global  in  package.GlobalVariables)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if (global.Name == "MailFromID"dot.gif{
InBlock.gif        package.GlobalVariables.Remove(global.Name);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gifpackage.GlobalVariables.AddGlobalVariable(
" MailFromID " ,MailFromID);
None.gif

插入时间:
DTSDestination("ReceiveDate") = new Date().getYear() + "-" + new Date().getMonth() + "-" + new Date().getDate();
用javascript拼出来的 哈哈

插入数据时需要从Sql中查询数据再插入:
在包里添加新的任务:
执行Sql任务
SELECT AddressList.*
FROM AddressList
WHERE (ID = ?)
然后配置 输入和输出参数

还剩下第2条没搞定,希望这2天能搞定~

转载于:https://www.cnblogs.com/calmzeal/archive/2006/05/28/411499.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值