在上篇文章中介绍到将Excel中数据导入到数据库中,但上篇文章例子只出现了nvachar类型,且数据量很小。今天碰到将Excel中数据导入数据库中的Excel有6419行,其中每行均有48个字段,有int、vachar、datetime、numeric类型,部分字段定义如下:

  

  可见除了STCD、SPT不允许为null值外,其它字段均允许为null值。在sqlserver数据库中某字段为null值,字符串可直接插入null值,比如如下sql语句成立:

  1. insert into WQ_PAS_A(ITMID,SMCL,WQG) values(null,null,null)

  其中表WQ_PAS_A各字段定义如下:

  

  插入结果如下:

  

  对于int、numeric类型也能直接插入null:

  1. insert into WQ_PCP_D (STCD,PRPNM,SPT) values('',null,'2012-12-05 08:43:00.000')
  2. insert into WQ_PCP_D (STCD,Z,SPT) values('',null,'2012-12-05 08:43:00.000')

  运行结果:

  

  但在对于上文的strsql如果写成如下形式会报错:不能将null转换成int类型(当然null也不能转换成numeric类型)

  1. string strSql = string.Format("Insert into WQ_PCP_D (STCD,PRPNM,SPT) Values ('{0}',{1},'{2}')", STCD, null, SPT);

  当然对于这种想直接插入null,有种办法就是不插入,不插入默认就是为null。

  下面是利用不插入的代码:

  1. Hashtable ht = new Hashtable();
  2. if (PRPNM != "") {ht.Add("PRPNM", Convert.ToInt32(PRPNM));}
  3. if (LYNM != "") { ht.Add("LYNM", Convert.ToInt32(LYNM)); }
  4. if (WBTP != "") {ht.Add("WBTP",Convert.ToInt32(WBTP)); }
  5. //if (SPT != "") { ht.Add("SPT", Convert.ToDateTime(SPT)); }
  6. if (Z != "") { ht.Add("Z", Convert.ToDecimal(Z)); }
  7. if (Q != "") { ht.Add("Q", Convert.ToDecimal(Q)); }
  8. if (S != "") { ht.Add("S", Convert.ToDecimal(S)); }
  9. if (CLARITY != "") { ht.Add("CLARITY", Convert.ToDecimal(CLARITY)); }
  10. if (AIRT != "") { ht.Add("AIRT", Convert.ToDecimal(AIRT)); }
  11. if (WT != "") { ht.Add("WT", Convert.ToDecimal(WT)); }
  12. if (PH != "") { ht.Add("PH", Convert.ToDecimal(PH)); }
  13. if (DOX != "") { ht.Add("DOX", Convert.ToDecimal(DOX)); }
  14. if (CODMN != "") { ht.Add("CODMN", Convert.ToDecimal(CODMN)); }
  15. if (CODCR != "") { ht.Add("CODCR", Convert.ToDecimal(CODCR)); }
  16. if (BOD5 != "") { ht.Add("BOD5", Convert.ToDecimal(BOD5)); }
  17. if (NH3N != "") { ht.Add("NH3N", Convert.ToDecimal(NH3N)); }
  18. if (TP != "") { ht.Add("TP", Convert.ToDecimal(TP)); }
  19. if (TN != "") { ht.Add("TN", Convert.ToDecimal(TN)); }
  20. if (CU != "") { ht.Add("CU", Convert.ToDecimal(CU)); }
  21. if (ZN != "") { ht.Add("ZN", Convert.ToDecimal(ZN)); }
  22. if (F != "") { ht.Add("F", Convert.ToDecimal(F)); }
  23. if (SE != "") { ht.Add("SE", Convert.ToDecimal(SE)); }
  24. if (ARS != "") { ht.Add("ARS", Convert.ToDecimal(ARS)); }
  25. if (HG != "") { ht.Add("HG", Convert.ToDecimal(HG)); }
  26. if (CD != "") { ht.Add("CD", Convert.ToDecimal(CD)); }
  27. if (CR6 != "") { ht.Add("CR6", Convert.ToDecimal(CR6)); }
  28. if (PB != "") { ht.Add("PB", Convert.ToDecimal(PB)); }
  29. if (CN != "") { ht.Add("CN", Convert.ToDecimal(CN)); }
  30. if (VLPH != "") { ht.Add("VLPH", Convert.ToDecimal(VLPH)); }
  31. if (OIL != "") { ht.Add("OIL", Convert.ToDecimal(OIL)); }
  32. if (LAS != "") { ht.Add("LAS", Convert.ToDecimal(LAS)); }
  33. if (S2 != "") { ht.Add("S2", Convert.ToDecimal(S2)); }
  34. if (SO4 != "") { ht.Add("SO4", Convert.ToDecimal(SO4)); }
  35. if (CL != "") { ht.Add("CL", Convert.ToDecimal(CL)); }
  36. if (NO3 != "") { ht.Add("NO3", Convert.ToDecimal(NO3)); }
  37. if (FE != "") { ht.Add("FE", Convert.ToDecimal(FE)); }
  38. if (MN != "") { ht.Add("MN", Convert.ToDecimal(MN)); }
  39. if (COND != "") { ht.Add("COND", Convert.ToDecimal(COND)); }
  40. if (CHLA != "") { ht.Add("CHLA", Convert.ToDecimal(CHLA)); }
  41. if (FCG != "") { ht.Add("FCG", Convert.ToInt32(FCG)); }
  42. if (K != "") { ht.Add("K", Convert.ToDecimal(K)); }
  43. if (NA != "") { ht.Add("NA", Convert.ToDecimal(NA)); }
  44. if (CA != "") { ht.Add("CA", Convert.ToDecimal(CA)); }
  45. if (MG != "") { ht.Add("MG", Convert.ToDecimal(MG)); }
  46. if (CO3 != "") { ht.Add("CO3", Convert.ToDecimal(CO3)); }
  47. if (HCO3 != "") { ht.Add("HCO3", Convert.ToDecimal(HCO3)); }
  48. if (MNDG != "") { ht.Add("MNDG", Convert.ToDecimal(MNDG)); }
  49.  
  50. String strsql = "Insert into WQ_PCP_D (STCD,SPT";
  51. string strValue = "";
  52. foreach (String key in ht.Keys)
  53. {
  54.  
  55. strsql += "," + key;
  56. strValue += "," + ht[key];
  57.  
  58. }
  59. strsql += ") values ('" + STCD +"', '" + SPT + "'";
  60. strsql += strValue;
  61. strsql += ")";

查看代码

  对于Excel中小数点后具体较长的数字,比如:0.00002中,如果是在Excel中是常规表示,则读出来可能是形如2e-05形式,这样形式再转换为decimal形式为报错,所以最好将Excel中保存成带几位小数点的数值形式:

  

  对于这种多行导入时,在用VS调试的时候,必定会用到设置条件断点调试,这里有篇文章来介绍设置条件断点调试。

  相关文章:

  (1)将Excel中数据导入数据库(一)

  (2)将Excel中数据导入数据库(二)

  (3)将Excel中数据导入数据库(三)

将Excel中数据导入数据库(二)的更多相关文章

  1. 将Excel中数据导入数据库(三)

    上篇文章将Excel中数据导入数据库时,将从Excel读入的数据均转换成了数据库相应字段的类型,其实这是没有必要的,因为对于数据库各种类型的插入,均可以字符串格式插入.比如表WQ_SWMSAR_A字段 ...

  2. 将Excel中数据导入数据库(一)

    在工作中经常要将Excel中数据导入数据库,这里介绍一种方法. 假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: Excel中数据导入数据库帮助类如下: using System; ...

  3. SpringBoot通过Ajax批量将excel中数据导入数据库

    Spring Boot通过Ajax上传Excel并将数据批量读取到数据库中 适合场景:需要通过excel表格批量向数据库中导入信息 操作流程 [1]前端上传一个excel表格 [2] 后端接收这个ex ...

  4. Excel表数据导入数据库表中

    ***Excel表数据导入到数据库表中 通过数据库表的模板做成‘Excel’表的数据导入到数据库相应的表中(注意:主表 和 从表的关系,要先导‘主表’在导入从表) 过程:通过数据库的导入工具—先导入为 ...

  5. mysqlconnector将EXCEL表数据导入数据库

    测试excel和脚本放在同一个目录 测试excel和脚本放在同一个目录 #!/usr/bin/env python #coding=utf-8 import xlrd import mysql.con ...

  6. excel表格数据导入数据库Oracle

    方法一: 1.创建数据表 CREATE TABLE T_USER (   ID             VARCHAR2(32) primary key,   NAME           VARCH ...

  7. SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)

    读取Excale表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; ...

  8. larave5.6 将Excel文件数据导入数据库代码实例

    <?php namespace App\Admin\Controllers; use App\AdminUser; use Illuminate\Http\Request; use Excel; ...

  9. java后端服务器读取excel将数据导入数据库

    使用的是easypoi,官网文档:http://easypoi.mydoc.io/ /** * 导入Excel文件 */ @PostMapping("/importTeacher" ...

随机推荐

  1. bzoj2764 基因补全

    Description 在生物课中我们学过,碱基组成了DNA(脱氧核糖核酸),他们分别可以用大写字母A,C,T,G表示,其中A总与T配对,C总与G配对.两个碱基序列能相互匹配,当且仅当它们等长,并且任 ...

  2. (VS) TFS lost mapping suddenly.

    家里的网络不是很稳定.今天突然发现 TFS 上所有的 mapping都突然没有了. 尝试去remapping,在Source Control Explorer 中右击源文件,然后选择 Advanced ...

  3. DBA_Oracle Event等待事件分析(概念)

    2014-12-18 Created By BaoXinjian

  4. uva 437 巴比伦塔(DAG上dp)

    巴比伦塔 紫书P269 看完紫书,终于可以自己写一个dp了 :) [题目链接]巴比伦塔 [题目类型]DAG上dp &题意: 有n种立方体 n<=30,每种有无穷个,要求选一些立方体摞成一 ...

  5. Educational Codeforces Round 15 Cellular Network

    Cellular Network 题意: 给n个城市,m个加油站,要让m个加油站都覆盖n个城市,求最小的加油范围r是多少. 题解: 枚举每个城市,二分查找最近的加油站,每次更新答案即可,注意二分的时候 ...

  6. 何时要打开stm32的AFIO时钟

    STM32的管脚配置一般有2个:Default和rinmap,如果使用default就不需要打开AFIO,否则使用后者就需要打开3个时钟:GPIO时钟.外设功能时钟和AFIO时钟. 一般在涉及外中断配 ...

  7. mysql基础语法之(全文索引)

    1.概要 InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引.对于FULLTEXT索引的内容可以使用MATCH()…AGAIN ...

  8. centos update git(转载)

    From:http://itekblog.com/update-git-centos/ 1.下载RPMForge repo cd /tmp # bit: wget http://pkgs.repofo ...

  9. How To Easily Call WCF Services Properly z

    Please note: this article has been superceded by the documentation for the ChannelAdam WCF Library. ...

  10. 使用matplot绘图 @python

    1. 使用csv 模块读取数据 2. 定义label 3. 绘图,调参 #!/usr/bin/env python # coding=utf-8 import sys import matplotli ...