将DataTable中的数据导入到数据库中
????????上次在根據excel的文件的路徑提取其中表的數據到DataSet中 一文中介紹了將Excel文件中的數據讀取到DataSet中的方法,今天我來介紹下我曾經在項目中用到的一個將DataTable中的數據導入到數據庫中的方法和將DataTable中的數據寫入數據庫并過濾掉重復數據的方法。代碼可以給大家作為Demo看下,如果需要應用的話,可能需要進行
小小的改動即可。
/// <summary>
??????? /// 將DataTable中數據寫入數據庫中
??????? /// </summary>
??????? /// <param name="dt"></param>
??????? /// <returns></returns>
??????? public static bool WriteDataToDB(DataTable dt)
??????? {
??????????? if (dt==null || dt.Rows.Count == 0)
??????????? {
??????????????? return true;
??????????? }
??????????? string tname = dt.TableName;
??????????? string colNames = "";
??????????? for (int i = 0; i < dt.Columns.Count; i++)
??????????? {
??????????????? colNames += dt.Columns[i].ColumnName + ",";
??????????? }
??????????? colNames = colNames.TrimEnd(',');
??????????? string cmd = "";
??????????? string colValues;
??????????? string cmdmode = string.Format("insert into {0}({1}) values({{0}});", tname, colNames);
??????????? for (int i = 0; i < dt.Rows.Count; i++)
??????????? {
??????????????? colValues = "";
??????????????? for (int j = 0; j < dt.Columns.Count; j++)
??????????????? {
??????????????????? if (dt.Rows[i][j].GetType() == typeof(DBNull))
??????????????????? {
??????????????????????? colValues += "NULL,";
??????????????????????? continue;
??????????????????? }
??????????????????? if (dt.Columns[j].DataType == typeof(string))
??????????????????????? colValues += string.Format("'{0}',", dt.Rows[i][j]);
??????????????????? else if (dt.Columns[j].DataType == typeof(int) || dt.Columns[j].DataType == typeof(float) || dt.Columns[j].DataType == typeof(double))
??????????????????? {
??????????????????????? colValues += string.Format("{0},", dt.Rows[i][j]);
??????????????????? }
??????????????????? else if (dt.Columns[j].DataType == typeof(DateTime))
??????????????????? {
??????????????????????? colValues += string.Format("cast('{0}' as datetime),", dt.Rows[i][j]);
??????????????????? }
??????????????????? else if (dt.Columns[j].DataType == typeof(bool))
??????????????????? {
??????????????????????? colValues += string.Format("{0},", dt.Rows[i][j].ToString());
??????????????????? }
??????????????????? else
??????????????????????? colValues += string.Format("'{0}',", dt.Rows[i][j]);
??????????????? }
??????????????? cmd = string.Format(cmdmode, colValues.TrimEnd(','));
??????????? }
??????????? int ret = 0;
??????????? try
??????????? {
??????????????? ret = DbHelperSQL.ExecuteSql(cmd);
??????????? }
??????????? catch (Exception e)
??????????? {
??????????????? //寫錯誤日志...
??????????????? string strOuput = string.Format("向數據庫中寫數據失敗,錯誤信息:{0},異常{1}\n", e.Message, e.InnerException);
??????????????? //將信息寫入到日志輸出文件
??????????????? DllComm.TP_WriteAppLogFileEx(DllComm.g_AppLogFileName, strOuput);
???????????????
??????????? }
??????????? if (ret == -1)
??????????? {
??????????????? return false;
??????????? }
??????????? return true;
???????????
??????? }
??????? /// <summary>
??????? /// 寫入基礎數據,并刪除其中的重復的項目
??????? /// </summary>
??????? /// <param name="dt"></param>
??????? /// <param name="KeyName">主鍵</param>
??????? /// <param name="icol">主鍵所在的列</param>
??????? /// <returns></returns>
??????? public static bool WriteDataToDB(DataTable dt, string KeyName, int icol)
??????? {
??????????? //刪除數據庫中的重復項目
??????????? string mKeyStr = "";
??????????? for (int i = 0; i < dt.Rows.Count; i++)
??????????? {
??????????????? mKeyStr += "'" + dt.Rows[i][icol] + "',";
??????????? }
??????????? mKeyStr = mKeyStr.Trim(',');
??????????? string sqlStr = "Delete? from? " + dt.TableName + " where " + KeyName + " in (" + mKeyStr + ")";
??????????? DbHelperSQL.ExecuteSql(sqlStr);
??????????? //向數據庫中寫入新的數據
??????????? string tname = dt.TableName;
??????????? string colNames = "";
??????????? for (int i = 0; i < dt.Columns.Count; i++)
??????????? {
??????????????? colNames += dt.Columns[i].ColumnName + ",";
??????????? }
??????????? colNames = colNames + "CreateDate ";
??????????? string cmd = "";
??????????? string colValues;
??????????? string cmdmode = string.Format("insert into {0}({1}) values({{0}});", tname, colNames);
??????????? for (int i = 0; i < dt.Rows.Count; i++)
??????????? {
??????????????? colValues = "";
??????????????? for (int j = 0; j < dt.Columns.Count; j++)
??????????????? {
??????????????????? if (dt.Rows[i][j].GetType() == typeof(DBNull))
??????????????????? {
??????????????????????? colValues += "NULL,";
??????????????????????? continue;
??????????????????? }
??????????????????? if (dt.Columns[j].DataType == typeof(string))
??????????????????? {
??????????????????????? colValues += string.Format("'{0}',", dt.Rows[i][j]);
??????????????????? }
??????????????????? else if (dt.Columns[j].DataType == typeof(int) || dt.Columns[j].DataType == typeof(float) || dt.Columns[j].DataType == typeof(double))
??????????????????? {
??????????????????????? colValues += string.Format("{0},", dt.Rows[i][j]);
??????????????????? }
??????????????????? else if (dt.Columns[j].DataType == typeof(DateTime))
??????????????????? {
??????????????????????? colValues += string.Format("cast('{0}' as datetime),", dt.Rows[i][j]);
??????????????????? }
??????????????????? else if (dt.Columns[j].DataType == typeof(bool))
??????????????????? {
??????????????????????? colValues += string.Format("{0},", dt.Rows[i][j].ToString());
??????????????????? }
??????????????????? else
??????????????????????? colValues += string.Format("'{0}',", dt.Rows[i][j]);
??????????????? }
??????????????? colValues += "getdate()";
??????????????? cmd = string.Format(cmdmode, colValues);
??????????????? int ret = 0;
??????????????? try
??????????????? {
??????????????????? ret = DbHelperSQL.ExecuteSql(cmd);
??????????????? }
??????????????? catch (Exception e)
??????????????? {
??????????????????? //寫錯誤日志...
??????????????????? string strOuput = string.Format("向數據庫中寫數據失敗,錯誤信息:{0},異常{1}\n", e.Message, e.InnerException);
??????????????????? //將信息寫入到日志輸出文件
??????????????????? DllComm.TP_WriteAppLogFileEx(DllComm.g_AppLogFileName, strOuput);
???????????????
??????????????? }
??????????????? if (ret == -1)
??????????????? {
??????????????????? return false;
??????????????? }
??????????? }
??????????? return true;
??????? }
?
?
轉載于:https://www.cnblogs.com/kevinGao/archive/2011/09/23/2186441.html
總結
以上是生活随笔為你收集整理的将DataTable中的数据导入到数据库中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BSPreloadTableVew带有预
- 下一篇: R如何与Tableau集成分步指南 -