向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開發資源網站及技術社區,新聞熱點
疑難解答