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