• DataTable交换列的位置,Excel导入到数据库中通用方法


    有数据是从Excel中导到DataTable中的,

    原来想用方法:DT.Columns.Add("新加的列名").SetOrdinal(4);//4是插入位置,插入后再把要换的列值加到这列中,再把列删除了,这样也可以。

    后来想到直接把二列的值交换这样更好办,如下

    //下面是交换第5列和6的值就OK,再把列名修改就完成了。

    for (int index = 0; index < DT.Rows.Count; index++)
    {
    string Temp=DT.Rows[index][5].ToString();
    DT.Rows[index][5] = DT.Rows[index][6].ToString();
    DT.Rows[index][6] = Temp;
    }

    要把这个DataTable导入到数据库中,因为表多,用了通用的方法导进去,只要Excel中的顺序和数据库中字段顺序一样就可以导进去,

    下面的方法在最后加了一列Addtime是Excel中没有的只有数据库中有这个字段,还有一些是判断是不是最后一行的标志

    /// <summary>
            /// 导入Excel到DB通用型,Excel表格列必须与数据表中的列顺序对应
            /// </summary>
            /// <param name="DT">Excel传换后的DataTable</param>
            /// <param name="TableName">数据库表名</param>
            /// <param name="rowStart">Excel从第几行开始读数据,从0开始数</param>
            /// <param name="colStart">Excel第几列开始读数据,从0开始数</param>
            /// <param name="colEnd">Excel第几列结束,从0开始数</param>
            /// <returns>void</returns>
            public static void DataTableToDB(System.Data.DataTable DT, string TableName, int rowStart, int colStart, int colEnd, DateTime AddTime)
            {
                SqlDbHelper DbHelper = new SqlDbHelper();
                if (DT.Rows.Count >= rowStart)
                {
                    int succeed = 0, fail = 0;
                    for (int i = rowStart; i < DT.Rows.Count; i++)
                    {
                        //第1,2列数据为空时表示结束本次循环
                        if (DT.Rows[i][colStart].ToString().Trim() == "" || DT.Rows[i][colStart + 1].ToString().Trim() == "" || DT.Rows[i][colStart].ToString().Trim() == "End of Report" || DT.Rows[i][colStart].ToString().Trim() == "#Trailer#") { continue; }
    
                        SqlParameter[] par = new SqlParameter[colEnd - colStart + 2];
                        string sql = "INSERT INTO [" + TableName + "]";
                        string values = "";
                        int k = 0;
                        for (int j = colStart; j <= colEnd; j++, k++)
                        {
    
                            values += (k == 0 ? "@c" + k.ToString() : ",@c" + k.ToString());
                            par[k] = new SqlParameter("@c" + k.ToString(), DT.Rows[i][j].ToString().Trim());
    
                        }
                        //添加最后一列加时间
                        values += ",@c" + k.ToString();
                        par[k] = new SqlParameter("@c" + k.ToString(), AddTime.ToString());
    
                        for (int s = 0; s < par.Length; s++)
                        {
                            //WriteLog("[" + par[s].ParameterName.ToString() + "]" + par[s].Value.ToString() + "---");
                        }
    
                        sql += " Values( " + values + " )";
    
                        if (DbHelper.Execute(sql, par) > 0)
                        {
                            //WriteLog("<br><font color=blue>成功</font>");
                            succeed++;
                        }
                        else
                        {
                            //WriteLog("<br><font color=red>失败</font>");
                            fail++;
                        }
                        //WriteLog(sql);
                    }
                    WriteLog("成功将" + succeed + "条,失败" + fail + "条导入到" + TableName);
                }
            }
            #endregion


    欢迎加入JAVA技术交流QQ群:179945282

    欢迎加入ASP.NET(C#)交流QQ群:17534377


  • 相关阅读:
    ionic serve 报【ionic-app-scripts' 不是内部或外部命令 】问题解
    Angular4.x+Ionic3 踩坑之路之打包时出现JAVASCRIPT HEAP OUT OF MEMORY的几种解决办法
    webpack打包---报错内存溢出javaScript heap out of memory
    IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)
    详解Intellij IDEA中.properties文件中文显示乱码问题的解决
    PostgreSQL判断一个表是否存在
    关于Hadoop结合RDBMS应用的一些思考
    hadoop的hdfs文件操作实现上传文件到hdfs
    用hdfs存储海量的视频数据的设计思路
    hbase+hive应用场景
  • 原文地址:https://www.cnblogs.com/q149072205/p/3092374.html
Copyright © 2020-2023  润新知