SQLite大批量插入性能優化


  SQLite作為輕量級,零安裝的數據庫,用在小型桌面應用程序上特別合適。

  網上搜了一下,貌似在程序中無法直接從格式化文本或CSV文件導入SQLite,只能逐條insert,這一點比起SQL SERVER就差了一些。

  好在SQLite經過優化后大批量插入速度也還可以,方法就是事務+參數化,直接上代碼。

string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString;
            using (SQLiteConnection con = new SQLiteConnection(strconn))
            {
                con.Open();
                using (SQLiteTransaction trans = con.BeginTransaction())
                {
                    using (SQLiteCommand cmd = new SQLiteCommand(con))
                    {
                        cmd.Transaction = trans;
                        try
                        {
                            using (FileStream fs = File.OpenRead("*.txt"))
                            {
                                using (StreamReader sr = new StreamReader(fs))
                                {
                                    string sline;
                                    string []arr;
                                    string str;
                                    rCount = 0;
                                    while(!sr.EndOfStream)
                                    {
                                        sline = sr.ReadLine();
                                        arr = sline.Split(',');
                                        str = "INSERT INTO XXXTABLE (A,B,C,D,E,F,G,H,I,J) VALUES(@A,@B,@C,@D,@E,@F,@G,@H,@I,@J)";
                                        cmd.CommandText = str;
                                        cmd.Parameters.AddWithValue("@A", arr[0]);
                                        cmd.Parameters.AddWithValue("@B", arr[1]);
                                        cmd.Parameters.AddWithValue("@C", arr[2]);
                                        cmd.Parameters.AddWithValue("@D", arr[3]);
                                        cmd.Parameters.AddWithValue("@E", arr[4]);
                                        cmd.Parameters.AddWithValue("@F", arr[5]);
                                        cmd.Parameters.AddWithValue("@G", arr[6]);
                                        cmd.Parameters.AddWithValue("@H", arr[7]);
                                        cmd.Parameters.AddWithValue("@I", arr[8]);
                                        cmd.Parameters.AddWithValue("@J", arr[9]);
                                        cmd.ExecuteNonQuery();
                                        rCount = rCount + 1;
                                    }
                                }
                            }
                            trans.Commit();
                            //5,清空txt
                            System.IO.File.WriteAllText(path + "*.txt", "", System.Text.Encoding.Default);
                        }
                        catch(Exception ex)
                        {
                            rCount = 0;
                            trans.Rollback();
                        }
                    }
                }
            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM