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


原文地址:https://www.cnblogs.com/q149072205/p/3092374.html