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

导入数据|问题

向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天能搞定~

时间: 2024-08-22 09:57:49

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

php mysql-在php中从Excel表中向mysql数据库导入数据

问题描述 在php中从Excel表中向mysql数据库导入数据 请问:如何实现在php中从Excel表中向mysql数据库导入数据,要注意那些东西? 解决方案 http://www.jb51.net/article/26921.htm 解决方案二: http://blog.csdn.net/china_skag/article/details/7098473 解决方案三: http://blog.csdn.net/jiaocaigeng/article/details/9470571 解决方案四

mssqlserver中BULK INSERT大批量导入数据 SQL SERVER

开门见山,直接以例子介绍:  代码如下 复制代码 CREATE TABLE [dbo].[course]( [id] [int] NULL, [name] [nvarchar](50) NULL, [CourseType] [nvarchar](50) NULL, [Course] [float] NULL ) 导入数据: 将下面的数据存储为文本文件或SQL文件 2,李刚,语文,89;3,李刚,数学,79;3,李刚,英语,69;4,李刚,化学,89   导入语句:  代码如下 复制代码 BULK

如何在Oracle 10g中通过网络连接导入数据

历史上,Oracle的导入及导出功能曾采用磁盘文件作为卸载和再装载数据库的存储中介.对于较大的数据库这样"交换文件"的方式是个大问题.因为过大文件将会超过操作系统对文件大小的限制,使得导出不能实现. 一些有创新精神的数据管理员使用文件压缩功能,例如UNIX中的压缩功能,以获得交换文件的最大容量.后来版本中的导入及导出功能允许使用多种交换文件以减少限制. 在Oracle 10g中,Data Pump版的导入功能能从其他数据库实例中直接导入,从而完全删除交换文件. 第一步是定义一个数据库链

MySQL中into outfile将导入数据到文件

1.如果MYSQL服务器就是你要导出文件的机器,那么可以直接用select -into outfile语句. select * from rank into outfile "/home/a.txt" 2.如果MYSQL服务器是单独的机器,我们是在一个client上进行操作,我们要把数据结果导入到client机器上.可以使用mysql -e语句. mysql -uroot -proot -P3306 -h10.35.13.89 dbname -e "select * from

技术-渣渣提问:EasyUI在一个页面中可以建几个数据表格

问题描述 渣渣提问:EasyUI在一个页面中可以建几个数据表格 我想知道在一个jsp页面中用easyui技术可以做出几个数据表格,要是想在一个jsp页面出现多个数据表格应该怎么解决 解决方案 解决方案二: 不同的table+不同的id $('#dg1').datagrid(); $('#dg2').datagrid(); $('#dg3').datagrid(); 就行了 解决方案三: 多方几个table,配置data-options分别加载不同的数据源就行了 相关文章 easyui-修改Dat

oracle数据库中如何导入数据

Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失). Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接 (通过Net Configuration Assistant添加正确的服务命名,其实你可以想成是客户端与服务器端 修了条路,然后数据就可以被拉过来了) 这样你可以把数据导出到本地,虽然可能服务器离你很远

Excel2013中工作表怎么导入Access数据库数据

  Excel2013中工作表怎么导入Access数据库数据 1.启动Excel 2013,打开需要导入Access数据库数据的工作表,在"数据"选项卡的"获取外部数据"组中单击"自Access"按钮,如图1所示.打开"选取数据源"对话框,选取作为数据源的数据库文件,然后单击"打开"按钮,如图2所示. 图1 单击"自Access"按钮. 图2 "选择数据源"对话框.

关于SQLserver中批量导入bcp命令每批导入数据的行数的疑问

问题描述 关于SQLserver中批量导入bcp命令每批导入数据的行数的疑问 关于SQLserver中bcp命令每批导入数据的行数的疑问 手册中有以下解释 -b batch_size 指定每批导入数据的行数.每批均作为一个单独的事务进行导入并记录,在提交之前会导入整批.**默认情况下,数据文件中的所有行均作为一批导入.** 问:为什么在我不指定-b 的行数时,默认的是以1000行为提交单位,手册中不是说是所有行吗?如果我一次导入100000条,默认也该是100000吗? 解决方案 bcp in时

sqlite-如何将导入到数据库表中的数据保存在程序中,而不用每次换调试机时还得重新导入数据

问题描述 如何将导入到数据库表中的数据保存在程序中,而不用每次换调试机时还得重新导入数据 如题:我有一张excel的表,我将其存为.csv文件,然后通过dos命令下的sqlite3命令导入到了数据库表中,问题是如果不换机子,导入到该数据库表中的数据永久有效.如果我换机子调试的话,该数据库表中的数据就不存在了,会报错,请问有没有解决办法?谢谢! 解决方案 最好存入远程数据库每次启动同步下来数据就可以了,sqlite是系统自带的数据库具体的就是http://blog.csdn.net/tianyit