将Excel作为数据源,将数据导入数据库,是SSIS的一个简单的应用,下图是示例Excel,数据列是code和name

第一部分,Excel中的数据类型是数值类型

1,使用SSDT创建一个package,创建Excel data source component,SSDT会在Connection Managers中创建一个Excel的connection

由于示例Excel的首行是列名,所以需要勾选"First row has column names",Excel connection manager 如下

2,数据源组件将Excel中的数据读取出来,并传递给其他组件,数据源组件其实是有输入和输出的,输入是指将Excel的数据导入到数据源组件中,输出是指将数据源组件中导入的Excel数据向下传递。

打开数据源组件的Advanced editor,通过Show Advanced Editor来打开

在Input and Output Properties选项卡中,External columns是Excel数据源组件的输入列,Output Columns是Excel数据源组件的输出列,每一列都是有DataType和CodePage。

默认情况下,SSIS的Excel链接器将Excel中的数字作为数值类型来对待

对于External columns,可以根据实际需要修改DataType和CodePage,对于数值类型,不需要关注CodePage,但是对于字符类型,CodePage就必须匹配,否则package在run时就会fail。

由于示例Excel的两列的值都是数字,SSIS默认设置DataType为数值类型,对于DataType,虽然可以修改,但是数据源组件并不负责DataType的转换,如果External columns 和Output Columns的DataType不相同,run的时候会抛出error。如果需要convert DataType,需要使用Data Conversion 组件。

3,在db中创建接收Excel数据的表tbExcel,数据类似是Nvarchar,接收的数据是数值型,这样并不会报错。

create table dbo.tbExcel
(
code nvarchar(),
name nvarchar()
)

4,创建一个Oledb数据目标组件,打开Advanced Editor,看到Ole db Destination Input 也有两个:

External columns:是DB中的目标表的数据列及其属性信息,本例是指 tbExcel 表的列和属性

Input Columns:是上游数据源组件传递的数据列及其属性信息

5,设置数据源组件和数据目标组件的列的mapping,execute package,成功导入13 rows 数据

第二部分,将Excel中的数据类型修改为文本类型

6,如果Excel source 中的数据是文本类型,实现起来必须考虑CodePage。

修改示例Excel,将name列修改为文本类型

7,将Db中的目标表做修改,将数据列修改为varchar

if object_id('dbo.tbExcel') is not null
drop table dbo.tbExcel create table dbo.tbExcel
(
code varchar(),
name varchar()
)

8,在execute package的过程中,ssis抛出错误信息,也就是说Excel中的文本使用的数据类型是unicode 的,而varchar并不是unicode,所以必须进行转换,在package中加入Data converion组件进行转换

===================================

Package Validation Error (Package Validation Error)

===================================

Error at Data Flow Task [OLE DB Destination [166]]: Column "name" cannot convert between unicode and non-unicode string data types.

Error at Data Flow Task [SSIS.Pipeline]: "OLE DB Destination" failed validation and returned validation status "VS_ISBROKEN".

Error at Data Flow Task [SSIS.Pipeline]: One or more component failed validation.

Error at Data Flow Task: There were errors during task validation.

(Microsoft.DataTransformationServices.VsIntegration)

9,execute package,仍然出错,错误原因是Code Page 不匹配,在数据传递的过程中,不能将code page为1252的数据传递到codepage为936的目标表中

Error at Data Flow Task [OLE DB Destination [203]]: The column "Copy of name" cannot be processed because more than one code page (1252 and 936) are specified for it.

下图是Ole db Destination Input,在External columns中查看name的属性,codepage是936,Input columns中查看name的属性,codepage是1252

由于列 copy of name是从Data Conversion中转换而来的,所以只需要修改一下转换后的数据列的CodePage就可以了。

10,设置列的mapping,再次Execute package,一路泛绿,成功导入13 rows

第三部分,一点小总结

  • Excel的文本,默认的数据类型是Unicode,长度是255
  • DB中的Varchar 不是unicode类型,nvarchar是unicode类型
  • 如果codepage不一致,可以通过data conversion组件进行转换

以Excel 作为Data Source,将data导入db的更多相关文章

  1. Collection View Programming Guide for iOS---(三)---Designing Your Data Source and Delegate

      Designing Your Data Source and Delegate 设计你的数据源和委托 Every collection view must have a data source o ...

  2. 数据库本地data source

    数据源表示数据库所在设备的ip地址或名称,基本上有以下几种写方法 data source = (local) data source = "127.0.0.1" data sour ...

  3. excel 导入数据库 / SSIS 中 excel data source --64位excel 版本不支持-- solution

    当本地安装的excel(2013版) 是64-bit时:出现的以下两种错误 解决: 1. excel 导入数据库 , 如果文件是2007则会出现:“The 'Microsoft.ACE.OLEDB.1 ...

  4. C# 连接SQL Server数据库的几种方式--server+data source等方式

    如何使用Connection对象连接数据库? 对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库.这些Connection对象为我们屏蔽了具体的实现细节,并提供了 ...

  5. Data access between different DBMS and other txt/csv data source by DB Query Analyzer

        1 About DB Query Analyzer DB Query Analyzer is presented by Master Genfeng,Ma from Chinese Mainl ...

  6. 前段时间,接手一个项目使用的是原始的jdbc作为数据库的访问,发布到服务器上在运行了一段时间之后总是会出现无法访问的情况,登录到服务器,查看tomcat日志发现总是报如下的错误。    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected est

    前段时间,接手一个项目使用的是原始的jdbc作为数据库的访问,发布到服务器上在运行了一段时间之后总是会出现无法访问的情况,登录到服务器,查看tomcat日志发现总是报如下的错误. Caused by: ...

  7. Installer - Eclipse配置Data Source Explorer

    一.配置Oracle数据库连接 1.打开配置窗口 在[window]菜单中的[show windows]选择[other],在弹出的窗口中选择[Data Source Explorer]进行数据数据库 ...

  8. Data source rejected establishment of connection, message from server: "Too many connections"解决办法

    异常名称 //数据源拒绝从服务器建立连接.消息:"连接太多" com.MySQL.jdbc.exceptions.jdbc4.MySQLNonTransientConnection ...

  9. 不支持关键字“data source”

    网上大部分都是说data source之间需要插入一个空格或者都是一些低级的拼写错误造成的,但是我没有出现这些情况,是通过把data source改成server解决的,具体config里面的代码如下 ...

随机推荐

  1. php 二位数组按某个键值排序

    $arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...

  2. 【原】iOS学习之图片拉伸处理(类似qq的气泡)

    原理是拉伸里面的内容,将边保护起来 方法1: ①[image resizableImageWithCapInsets:UIEdgeInsetsMake(, , , )]; ②[image resiza ...

  3. Linux内核笔记——进程管理之执行体

    内核版本:linux-2.6.11 在Linux中,有多种执行体(指令流.执行单位),它们是CPU调度和分配资源的基本单位,它们是内核态可见的,即内核态下,每一种执行体都有对应的唯一数据结构task_ ...

  4. Winform中创建超链接,点击跳转网页

    代码如下: System.Diagnostics.Process ie = new System.Diagnostics.Process();ie.StartInfo.FileName = " ...

  5. 2分钟 sublime设置自动行尾添加分号并换行:

    18:03 2016/4/162分钟 sublime设置自动行尾添加分号并换行:注意:宏文件路径要用反斜杠/,2个\\会提示无法打开宏文件.不需要绝对路径很简单利用宏定义:1.录制宏:由于是录制动作宏 ...

  6. TDD测试驱动开发

    TDD测试驱动开发 一.概念 TDD故名思意就是用测试的方法驱动开发,简单说就是先写测试代码,再写开发代码.传统的方式是先写代码,再测试,它的开发方式与之正好相反. TDD是极限编程的一个最重要的设计 ...

  7. 站内全文检索服务来了,Xungle提供免费全文检索服务

    免费站内全文检索服务来了,是的,你没听错.全文检索相信大家已经不太陌生,主流检索服务有sphinx.xunsearch等,但这些都受服务器限制,对于中小站长尤其是没有服务器实现就困难了,随着数据量的增 ...

  8. 黑马程序员----java基础笔记下(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 目录--- 21.字符编码 22.javaswig 事件 23.socket 网络通讯 24.网 ...

  9. php数据加密

    <?php/** * 简单对称加密算法之加密 * @param String $string 需要加密的字串 * @param String $skey 加密EKY * @author Anyo ...

  10. Python 比较两个字符串大小

    python 2中,有cmp(a,b)函数,用于比较两个字符串的大小. 如 >>>a='abc' >>>b='abd' >>>print cmp( ...