zoukankan      html  css  js  c++  java
  • 将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;
            }

  • 相关阅读:
    http返回码
    WCF 超时
    MVC异步
    熔断设计模式
    JAVA学习图
    java io模型
    keep alive 长连接
    Java异常处理 误区
    架构的本质
    Repository模式
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/dfdfds.html
Copyright © 2011-2022 走看看