zoukankan      html  css  js  c++  java
  • SQLite 批量插入很慢?用事务解决。

    SQLite把每一次操作都当成一个事务,例如插入一条数据也是一个事务。删除一个也是事务。

    在批量操作的时候就是N个事务,所以很慢,但是如果把N条插入语句放在一个事务里就很快哦

    大概代码如下:

     public bool ImportToDBFromFile(string connStr, string fullExcelFilePath)
            {
                string sql = @"insert into AttachMent(KITID,CName,CPhone,Ptype,ISN,DateTime,Money,JName,JNameError,Sort,TimeStamp) 
                                    values ('{0}','{1}','{2}','{3}','{4}','{5}',{6},'{7}','{8}',{9},'{10}')";
                //过滤字判断
                string fifterPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "System.Data.Words.dll");
                List<string> words = File.ReadAllLines(fifterPath).ToList().Distinct().ToList();
                //过滤字判断
                string tempSQL = string.Empty;
    
                using (SQLiteConnection conn = new SQLiteConnection(connStr))
                {
                    conn.Open();
                    DbTransaction trans = conn.BeginTransaction();
                    DataSet ds = OfficeUtils.ExcelToDataSetByGjp(fullExcelFilePath);
                    DataTable dt = ds.Tables[0];
                    if (dt.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            //插入数据库的时候就过滤关键词
                            string fileJname = Convert.ToString(dr["JName"]);
                            string fileJnameError = Convert.ToString(dr["JNameError"]);
    
                            foreach (string w in words)
                            {
                                if (fileJname.StartsWith(w))
                                {
                                    fileJname = fileJname.Replace(w, "").TrimStart();
                                    break;
                                }
    
                                if (fileJnameError.StartsWith(w))
                                {
                                    fileJnameError = fileJnameError.Replace(w, "").TrimStart();
                                    break;
                                }
                            }
    
    
                            tempSQL = string.Format(sql,
                                Convert.ToString(dr["KITID"])
                                , Convert.ToString(dr["CName"])
                                , Convert.ToString(dr["CPhone"])
                                , Convert.ToString(dr["PType"])
                                , Convert.ToString(dr["ISN"])
                                , Convert.ToString(dr["DateTime"])
                                , dr["Money"] == DBNull.Value ? 0.0 : Convert.ToDouble(dr["Money"])
                                , fileJname//Convert.ToString(dr["JName"])
                                , fileJnameError
                                , Convert.ToInt32(dr["Sort"])
                                , DateTime.Now
                                );
                            using (SQLiteCommand comm = new SQLiteCommand(tempSQL, conn))
                            {
                                comm.ExecuteNonQuery();
                            }
                        }
                    }
                    trans.Commit();
                }
                //导入完成后,更新字段。
                string updateSQL = @"update attachment set JName = JNameError where JName =''";
                DBHelper.ExecuteNonQuery(updateSQL);
    
                return true;
            }
    

      

  • 相关阅读:
    记一次干扰后处理特效的实现
    Cosine-Weighted采样算法
    PBR技术简介(三):菲涅尔公式
    PBR技术简介(二):Cook-Torrance BRDF
    PBR技术简介(一)
    Python函数的默认参数坑点解析
    屏幕空间环境光屏蔽(SSAO)探秘
    辐射度量学简介(二)
    辐射度量学简介(一)
    解决16bit压缩贴图失真问题
  • 原文地址:https://www.cnblogs.com/HandLoong/p/8985920.html
Copyright © 2011-2022 走看看