将DataTable中的数据导入到数据库中

时间:2022-01-08 20:42:17

        上次在根据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;
        }