使用c#代码

时间:2017-10-31 16:36:58

标签: c# csv sqlite

我的CSV文件中有300万个数据。我想在10-15分钟内将这些批量数据插入到SQLite数据库中。通常使用以下代码需要20分钟。

我的样本:

SQLiteConnection con = new SQLiteConnection("Data Source="D:\\SQLiteData.db;Version=3;New=False;Compress=True;");
        if (!File.Exists("D:\\SQLiteData.db"))
        {
            SQLiteConnection.CreateFile("D:\\SQLiteData.db");
        }
        con.Open();
        SQLiteCommand com = con.CreateCommand();
        com.Transaction = con.BeginTransaction();
        com.CommandText = "CREATE TABLE Sample([ELEMENT_ID] real,[DATE] datetime,[COMMENT] real);"
            com.ExecuteNonQuery();
        com.CommandText = "INSERT INTO [Sample] VALUES(@C0,@C1,@C2)";
        using (var fileStream = new FileStream("E:\\comma.csv", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        using (StreamReader streamReader = new StreamReader(fileStream))
        {
            using (CsvReader reader = new CsvReader(streamReader))
            {
                reader.ValueSeparator =’,’;
                reader.ReadHeaderRecord();
                while (reader.HasMoreRecords)
                {
                    DataRecord record = reader.ReadDataRecord();
                    com.Parameters.Clear();
                    for (int i = 0; i < reader.HeaderRecord.Count; i++)
                    {
                        com.Parameters.AddWithValue("@c" + i, string.Empty);
                    }
                    com.ExecuteNonQuery();
                }
            }
        }

有人可以建议我在更短的时间内将批量CSV数据移动到SQLite中吗?

1 个答案:

答案 0 :(得分:0)

执行一次巨大的插入导致单个 ExecuteNonQuery() 和单个事务应该提高性能。您也可以尝试通过 processInfo 导入 csv。