zoukankan      html  css  js  c++  java
  • 将Excel中数据导入数据库(二)

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

      

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

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

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

      

      插入结果如下:

      

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

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

      运行结果:

      

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

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

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

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

    Hashtable ht = new Hashtable();
    if (PRPNM != "") {ht.Add("PRPNM", Convert.ToInt32(PRPNM));}
    if (LYNM != "") { ht.Add("LYNM", Convert.ToInt32(LYNM)); }
    if (WBTP != "") {ht.Add("WBTP",Convert.ToInt32(WBTP)); }
    //if (SPT != "") { ht.Add("SPT", Convert.ToDateTime(SPT)); }
    if (Z != "") { ht.Add("Z", Convert.ToDecimal(Z)); }
    if (Q != "") { ht.Add("Q", Convert.ToDecimal(Q)); }
    if (S != "") { ht.Add("S", Convert.ToDecimal(S)); }
    if (CLARITY != "") { ht.Add("CLARITY", Convert.ToDecimal(CLARITY)); }
    if (AIRT != "") { ht.Add("AIRT", Convert.ToDecimal(AIRT)); }
    if (WT != "") { ht.Add("WT", Convert.ToDecimal(WT)); }
    if (PH != "") { ht.Add("PH", Convert.ToDecimal(PH)); }
    if (DOX != "") { ht.Add("DOX", Convert.ToDecimal(DOX)); }
    if (CODMN != "") { ht.Add("CODMN", Convert.ToDecimal(CODMN)); }
    if (CODCR != "") { ht.Add("CODCR", Convert.ToDecimal(CODCR)); }
    if (BOD5 != "") { ht.Add("BOD5", Convert.ToDecimal(BOD5)); }
    if (NH3N != "") { ht.Add("NH3N", Convert.ToDecimal(NH3N)); }
    if (TP != "") { ht.Add("TP", Convert.ToDecimal(TP)); }
    if (TN != "") { ht.Add("TN", Convert.ToDecimal(TN)); }
    if (CU != "") { ht.Add("CU", Convert.ToDecimal(CU)); }
    if (ZN != "") { ht.Add("ZN", Convert.ToDecimal(ZN)); }
    if (F != "") { ht.Add("F", Convert.ToDecimal(F)); }
    if (SE != "") { ht.Add("SE", Convert.ToDecimal(SE)); }
    if (ARS != "") { ht.Add("ARS", Convert.ToDecimal(ARS)); }
    if (HG != "") { ht.Add("HG", Convert.ToDecimal(HG)); }
    if (CD != "") { ht.Add("CD", Convert.ToDecimal(CD)); }
    if (CR6 != "") { ht.Add("CR6", Convert.ToDecimal(CR6)); }
    if (PB != "") { ht.Add("PB", Convert.ToDecimal(PB)); }
    if (CN != "") { ht.Add("CN", Convert.ToDecimal(CN)); }
    if (VLPH != "") { ht.Add("VLPH", Convert.ToDecimal(VLPH)); }
    if (OIL != "") { ht.Add("OIL", Convert.ToDecimal(OIL)); }
    if (LAS != "") { ht.Add("LAS", Convert.ToDecimal(LAS)); }
    if (S2 != "") { ht.Add("S2", Convert.ToDecimal(S2)); }
    if (SO4 != "") { ht.Add("SO4", Convert.ToDecimal(SO4)); }
    if (CL != "") { ht.Add("CL", Convert.ToDecimal(CL)); }
    if (NO3 != "") { ht.Add("NO3", Convert.ToDecimal(NO3)); }
    if (FE != "") { ht.Add("FE", Convert.ToDecimal(FE)); }
    if (MN != "") { ht.Add("MN", Convert.ToDecimal(MN)); }
    if (COND != "") { ht.Add("COND", Convert.ToDecimal(COND)); }
    if (CHLA != "") { ht.Add("CHLA", Convert.ToDecimal(CHLA)); }
    if (FCG != "") { ht.Add("FCG", Convert.ToInt32(FCG)); }
    if (K != "") { ht.Add("K", Convert.ToDecimal(K)); }
    if (NA != "") { ht.Add("NA", Convert.ToDecimal(NA)); }
    if (CA != "") { ht.Add("CA", Convert.ToDecimal(CA)); }
    if (MG != "") { ht.Add("MG", Convert.ToDecimal(MG)); }
    if (CO3 != "") { ht.Add("CO3", Convert.ToDecimal(CO3)); }
    if (HCO3 != "") { ht.Add("HCO3", Convert.ToDecimal(HCO3)); }
    if (MNDG != "") { ht.Add("MNDG", Convert.ToDecimal(MNDG)); }
    
    String strsql = "Insert into WQ_PCP_D (STCD,SPT";
    string strValue = "";
    foreach (String key in ht.Keys)
    {
    
        strsql += "," + key;
        strValue += "," + ht[key];
    
    }
    strsql += ") values ('" + STCD +"', '" + SPT + "'";
    strsql += strValue;
    strsql += ")";   
    查看代码

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

      

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

      相关文章:

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

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

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

  • 相关阅读:
    SIP语音对讲从零到整之(二)resiprocate编译(Linux,库用于Android)
    Intel Media SDK decode_sample剖析(一)——初始化及解码数据头
    Hadoop-HA集群搭建-rehl7.4
    (1)jmeter录制脚本(使用代理的方式)
    Java自动化环境搭建笔记(3)
    Java自动化环境搭建笔记(1)
    ant安装(Windows)
    jmeter源码环境(IDEA)
    离线安装docker(RedHat7.4)
    PostgreSQL日志分析工具
  • 原文地址:https://www.cnblogs.com/danshui/p/3212325.html
Copyright © 2011-2022 走看看