一:查询数据库表中字段的类型语句

SELECT  CASE WHEN col.colorder = 1 THEN obj.name
ELSE ''
END AS 表名,
col.colorder AS 序号 ,
col.name AS 列名 ,
ISNULL(ep.[value], '') AS 列说明 ,
t.name AS 数据类型 ,
col.length AS 长度 ,
ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数 ,
CASE WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '1'
ELSE ''
END AS 标识 ,
CASE WHEN EXISTS ( SELECT 1
FROM dbo.sysindexes si
INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id
AND si.indid = sik.indid
INNER JOIN dbo.syscolumns sc ON sc.id = sik.id
AND sc.colid = sik.colid
INNER JOIN dbo.sysobjects so ON so.name = si.name
AND so.xtype = 'PK'
WHERE sc.id = col.id
AND sc.colid = col.colid ) THEN '1'
ELSE ''
END AS 主键 ,
CASE WHEN col.isnullable = 1 THEN '1'
ELSE ''
END AS 允许空 ,
ISNULL(comm.text, '') AS 默认值
FROM dbo.syscolumns col
LEFT JOIN dbo.systypes t ON col.xtype = t.xusertype
inner JOIN dbo.sysobjects obj ON col.id = obj.id
AND obj.xtype = 'U'
AND obj.status >= 0
LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.id
LEFT JOIN sys.extended_properties ep ON col.id = ep.major_id
AND col.colid = ep.minor_id
AND ep.name = 'MS_Description'
LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_id
AND epTwo.minor_id = 0
AND epTwo.name = 'MS_Description'
WHERE obj.name = ''--表名
ORDER BY col.colorder ;

效果图:

二:帮助类

主要判断Excel表格中字段类型和数据库中的字段类型 ,(使用插件aspose.cells)

 public  class DataTypeHelper
{
public static bool IsCanConvert(string str, DataColumn col)
{ if (col.DataType.Name.ToLower() == "decimal")
{
try
{
if (str == "IsDecimal" || str == "IsNumeric")
{
return true;
} return false;
}
catch (Exception)
{ return false;
}
} if (col.DataType.Name.ToLower() == "string")
{
try
{
if (str == "IsString")
{
return true;
} return false;
}
catch (Exception)
{ return false;
}
} if (col.DataType.Name.ToLower() == "int")
{
try
{ if (str == "IsInt")
{
return true;
} return false;
}
catch (Exception)
{ return false;
}
} if (col.DataType.Name.ToLower() == "datetime")
{
try
{ if (str == "IsDateTime")
{
return true;
} return false;
}
catch (Exception)
{ return false;
}
}
return false;
} }

三:业务处理代码:

1.拼接一条查询返回Excel对应表中的第一条数据:

                   string dd = Context.Config.InsertSql;
string[] a1 = dd.Split(')');
string[] b = a1[0].Split('(');
string c = b[0].Replace("insert", "").Replace("into", "").Trim();
//查询出一条记录
string strSql = "select top 1 " + b[1] + " from " + c;

2.循环判断:

  DataTable dt1 = new DataTable();

                    dt1 = ISS.DataAccess.DbHelper.ExecuteDataSetBySql("SheetConncetionKey", strSql).Tables[0];

                    //取到Sheet中的值   循环列

                    int i1 = 0;
for (int j = Context.Config.DataStartCol; j < Context.Config.DataEndCol + 1; j++)
{
for (int m = Context.Config.DataStartRow + 1; m < Context.Config.DataEndRow + 1; m++)
{ if (endRows > Context.Config.DataStartRow + 1)
{
string ss = Context.Worksheet.Cells[m, j].Type.ToString(); if (Context.Worksheet.Cells.Columns[j].IsHidden)
continue;
if (Context.Worksheet.Cells[Context.Config.DataStartRow, j].StringValue.Trim().ToLower() == "name".ToLower())
{
//找到财务费用的行 赋值给j 13
continue;
} if (ss == "IsNull")
{
continue;
} DataColumn dc = dt1.Columns[i1]; if (!DataTypeHelper.IsCanConvert(Context.Worksheet.Cells[m, j].Type.ToString(), dt1.Columns[i1]) && Context.Worksheet.Cells[m, j].Type.ToString() != "IsNull")
{
errorList.Add(wb.Worksheets[i].Name + "单元格中" + (Convert.ToInt32(m) + 1) + "行" + Context.Worksheet.Cells[m, j].Name + "列" + "数据格式不匹配,内容为:" + Context.Worksheet.Cells[m, j].Value.ToString()); }
}
} i1++;
}

效果:

Excel上传找到错误数据类型的更多相关文章

  1. IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗

    前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免 ...

  2. 阿里云slb上传证书错误

    阿里云上传证书错误 今天在阿里云给slb上传新买的证书,传的过程中报错了,如下: 网上找了半天没找到,鼠标放在错误哪行行首,会报一个错 大意就是一行最多64个字符,我检查了下,报错这行是68个字符,于 ...

  3. excel上传和下载

    需要注意的地方: 1.js构造表单并提交 2.js中文传参encodeURI(encodeURI("中文")),action接收并转换value = URLDecoder.deco ...

  4. EXCEL上传POI

    Java SpringMVC POI上传excel并读取文件内容 2017年11月27日 15:26:56 强人锁男. 阅读数:15329   用的SSM框架,所需要的jar包如图所示:,链接地址:j ...

  5. Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法

    Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法 在使用struts2的项目中上传文件的时候出现了一个这样的错误: 2011-7 ...

  6. Excel上传并读取数据

    最近一段时间,维护一个旧系统,其中有一个功能,是把Excel上传,并读取数据进行维护,然后转插入至SQL数据库中.下面Insus.NET使用asp.net 标准上传控件: <asp:FileUp ...

  7. 基于thinkphp5的Excel上传

    涉及知识点: thinkphp5.0: excel上传: mysql建立新表(基本的create语句): mysql ignore(避免重复插入): 主要功能: 通过在视图中上传excel文件,在my ...

  8. 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)

    一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...

  9. poi之Excel上传

    poi之Excel上传 @RequestMapping(value = "/import", method = RequestMethod.POST) public String ...

随机推荐

  1. react native 中es6语法解析

    react native是直接使用es6来编写代码,许多新语法能提高我们的工作效率 解构赋值 var { StyleSheet, Text, View } = React; 这句代码是ES6 中新增的 ...

  2. Android 操作UI线程的一些方法

    我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据.但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的.下面总结4 ...

  3. pytest 单元测试

    pytest简介 pytest 是python的一种单元测试框架,它非常的简洁.清晰. pytest 安装 pip install -U pytest 查看pytest版本 pytest --vers ...

  4. JAVAWEB 一一 Sturts2+ibatis(框架,Sturts2,用action代替servlet)

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...

  5. CSS强制换行和禁止换行代码

    一.强制换行      1.word-break: break-all;       只对英文起作用,以字母作为换行依据.      2.word-wrap: break-word;   只对英文起作 ...

  6. 如何自学web安全(详细路径)

    看到学习路径,收藏一下https://blog.csdn.net/q251500/article/details/79441316

  7. 03_java基础(三)之第一个程序与开发工具的安装

    1.第一个Java程序 ① 找一个特定的放代码的地方    ② 新建一个文本文档 --> 改名 Hello.java        注意 : 必须先把文件的后缀名都显示出来     不同的操作系 ...

  8. db2 性能查看top sql

    DB2 V10.3    查看top sql ,类似oracle 这篇文章是对之前有篇db2 v9的简化更新,总体还是觉得DB2TOP比较好用直观,不过需要导出SQL时,或自动化脚本时,还是建议执行S ...

  9. windows(cr lf )转unix (lf)

  10. js获取当前时间是本年的第几天第几周

      let d1 = new Date() let d2 = new Date() d2.setMonth(0) d2.setDate(1) let rq = d1-d2 let s1 = Math. ...