|
经验一 关于IS中Excel数据源的问题
在前几篇文章中,我简单介绍了IS中处理Excel的一些方法和注意事项。但随着客户的不断使用,相关问题也在不断的出现:
- 1.将Excel文件所有单元格格式设置成文本后,金额、数量等数值型内容无法进行合计。
- 2.将Excel文件所有单元格格式设置成文本前,日期格式字段有自定义格式,员工在录入时只需录入少许内容(例如:录入8-8,Excel自动识别为2008-8-8)即可,但修改单元格格式后,录入时的格式必须为正规的日期格式(例如:2008-1-1,2008-10-10等)程序才能够识别,这样势必大量增加员工的工作量。
注:Excel数据源中日期类型单元格可自定义为日期类型,数值类型单元格可自定义为数字类型。
3.如“图表一”中的一列数据,此列数据单元格格式为文本格式,并且此列数据内容应该按照字符型导入到数据库中,但图中红色区域(即单元格左上角有绿色的三角)的内容却无法导入到数据库。
这样的问题在许多Excel数据源中都存在,导致IS程序非常不稳定,经常出现错误。尤其对于周期性更换的文档,此类问题在文档替换日期发生的概率非常大。
经过长时间的查找资料和测试过程中,我发现有一种方法可以解决以上问题:
如“图表2”将Excel数据源的ConnectionString属性修改为:
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=D:\档案.xls;
Extended Properties=EXCEL 12.0;
其中Data Source为Excel数据源存放地址。
经过修改基本可以解决上述几点问题。但是如果在日期类型字段中录入一串数字的话Excel中就是显示为许多的“#”,这个时候仍然会出现错误,暂时还没有办法解决这个问题。
经验二 SQL中带变量的LIKE比较查询
在项目过程中,需要用到SQL中带变量的like比较查询,例如sql语句:Select Worker_ID from WorkerInfo where WorkerName like ‘%@name%’。但这样显然是有错误的,变量作为like关键字的%匹配有些问题。
通过网络查询,发现这还是一个比较普遍的问题,得到一些答案是在传入参数前,先拼接好字符串,
例如:cmd.Parameters.Add(“@name”, “%” + textname.text + “%”);
但是在Reporting Services的报表开发时无法实现提前拼接好字符串的功能,需要依靠修改报表数据源中的SQL语句来解决问题。修改内容如下:在报表中将SQL例句中like后面的部分改写成like ‘%’ + @name + ‘%’,问题终于被解决。
但是在测试过程中曾忽略了这种情况:在Managerment Studio中,试着在执行SQL前先将字符串拼接好,内容如下:
declare @strName nchar(10)
set @strName = ‘%’ + @name + ‘%’
select Worker_ID from WorkerInfo where WorkerName like @strName
这样得出来的结果并不是我想要的结果,后来想起来,nchar、char类型,当传入的参数不足10位的时候会以空格填充,因此这里需要将变量的类型改为nvarchar或者varchar。
以上是在项目实施过程中遇到的两点问题以及解决方法,希望能对大家有所帮助。
作者介绍:
周元康 MSDN特邀讲师 北京迈思奇科技有限公司项目经理、BI实施工程师,软件工程专业硕士。主攻项目管理、数据ETL过程、数据挖掘、数据仓库、权限控制,具有多年的BI项目实施经验。
|