向sql 中导入excel数据时,使用ms sql的dts功能
可以很方便的导入,同时引用dll文件,可以在程序中对导入过程进行控制。
创建dts包的过程如下:
1。在sql企业管理器中,工具菜单选数据转换服务,导入数据
按照它的图形化向导提示,可以一步步创建一个dts包,可以选择保存在数据库。
2。在sql企业管理器中,左边树形结构中选择 数据转化服务,本地包中
可以新建一个包,同样有图形化的界面建立包:拖一个excel数据源,拖一个sql数据源
然后在任务里选 数据转化任务,原数据选excel源,目的选sql,然后在转化的肩头上选属性
里面可以配置转化过程。注意带有主键的数据表,要把选项中 启用标示插入去掉
在c#里调用过程如下:
private void rundts()
2 {
3 dts.package2class package = new package2class();
4 object p = null;
5 package.loadfromsqlserver("ws-victor-03", null, null, dts.dtssqlserverstorageflags.dtssqlstgflag_usetrustedconnection,
6 null, null, null, "testdts", ref p);
7 package.connections.item(1).datasource = "dts.xls";
8 package.execute();
9 }
现在项目中遇到问题:
1。插入数据时需要插入时间等excel数据源中不存在的数据
2。excel数据源中数据有的需要转化,像数值形,导入后变成了1。23131e12等形式
3。插入数据时需要从sql中查询数据再插入
现在解决了第一条和第三条的一步分:
在上述配置 数据转化任务 时,
dtsdestination("icc") = dtssource("sim number");
dtsdestination("imsi") = dtssource("imsi");
dtsdestination("pin1") = dtssource("pin1");
dtsdestination("puk1") = dtssource("puk1");
dtsdestination("pin2") = dtssource("pin2");
dtsdestination("puk2") = dtssource("puk2");
dtsdestination("msisdn") = dtssource("msisdn");
dtsdestination("fax") = dtssource("fax");
dtsdestination("data") = dtssource("data");
dtsdestination("barring") = dtssource("barring");
dtsdestination("mailformid") = dtsglobalvariables("mailfromid").value;
dtsdestination("receivedate") = new date().getyear() + "-" + new date().getmonth() + "-" + new date().getdate();
return(dtstransformstat_ok);
其中,mailfromid为全局变量,添加方法为包 菜单 属性里面选择全局变量,可在c#中对其进行赋值:
foreach(globalvariable global in package.globalvariables)
{
if (global.name == "mailfromid") {
package.globalvariables.remove(global.name);
}
}
package.globalvariables.addglobalvariable("mailfromid",mailfromid);
插入时间:
dtsdestination("receivedate") = new date().getyear() + "-" + new date().getmonth() + "-" + new date().getdate();
用javascript拼出来的 哈哈
插入数据时需要从sql中查询数据再插入:
在包里添加新的任务:
执行sql任务
select addresslist.*
from addresslist
where (id = ?)
然后配置 输入和输出参数
还剩下第2条没搞定,希望这2天能搞定~
中国最大的web开发资源网站及技术社区,新闻热点
疑难解答