• 将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;
            }

  • 相关阅读:
    python并发编程之gevent协程(四)
    python并发编程之asyncio协程(三)
    python并发编程之multiprocessing进程(二)
    python并发编程之threading线程(一)
    python设计模式之内置装饰器使用(四)
    python设计模式之装饰器详解(三)
    python设计模式之迭代器与生成器详解(五)
    EF code First数据迁移学习笔记
    15.02.13-代码小技巧
    Route学习笔记之Area的Route注册
  • 原文地址:https://www.cnblogs.com/kevinGao/p/2186441.html
Copyright © 2020-2023  润新知