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

 

你可能感兴趣的:(Datatable)