Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将CSV文件大容量插入SQLite C_C#_Database_Sqlite_Csv_Bulkinsert - Fatal编程技术网

C# 如何将CSV文件大容量插入SQLite C

C# 如何将CSV文件大容量插入SQLite C,c#,database,sqlite,csv,bulkinsert,C#,Database,Sqlite,Csv,Bulkinsert,我见过类似的问题,但没有一个讨论如何将CSV文件插入SQLite。我能想到的唯一一件事是使用CSVDataAdapter并填充SQLiteDataSet,然后使用SQLiteDataSet更新数据库中的表: 我找到的唯一用于CSV文件的DataAdapter实际上不可用: CSVDataAdapter CSVda = new CSVDataAdapter(@"c:\MyFile.csv"); CSVda.HasHeaderRow = true; DataSet ds = new DataSe

我见过类似的问题,但没有一个讨论如何将CSV文件插入SQLite。我能想到的唯一一件事是使用CSVDataAdapter并填充SQLiteDataSet,然后使用SQLiteDataSet更新数据库中的表:

我找到的唯一用于CSV文件的DataAdapter实际上不可用:

CSVDataAdapter CSVda = new CSVDataAdapter(@"c:\MyFile.csv");

CSVda.HasHeaderRow = true;

DataSet ds = new DataSet(); // <-- Use an SQLiteDataSet instead

CSVda.Fill(ds);
我找到了上面的代码@ CSVDataAdapter本应随附,但它似乎不再可用


有人知道我在哪里可以买到CSVDataAdapter吗?也许有人知道更简单的事情:如何将CSV文件批量插入SQLite。。。非常感谢您的帮助

您可以使用多种工具将数据从.csv文件迁移到数据库,包括:

,使用命令 工具,比如 注意:第一个和第三个解决方案要求通过jdbc接口访问.csv文件

所有这些都将允许您在一定程度上调整迁移过程,例如批量大小,并且所有这些都假设您希望手动执行迁移,而不是通过运行C代码来执行迁移,这将使事情变得复杂一点。

试试这个-

您可以创建OleDbConnection到CSV文件,只需通过谷歌搜索它,很容易将行加载到数据集,然后通过SqliteConnection将该数据集放入Sqlite。几行代码


我与文件助手有着良好的个人经验。

请回答问题的最后一部分:

也许有人知道更简单的事情:如何进行批量插入 将CSV文件转换为SQLite

如果您需要从CSV文件将数千条或百万条记录导入sqlite, 如果不直接支持通过select或insert命令导入csv数据,并且无法执行逐行读取和插入的迭代,那么一种实用的替代方法是使用sqlite?.exe并通过shell从c代码执行导入命令

loadcsvtosqlite.cs

loadcsvtosqlite.bat

loadcsv.sql


我喜欢OleDb的想法。。。真聪明有没有办法不将整个CSV数据加载到内存中?当使用SQL Workbench用于批量加载文本文件时,WbCopy是错误的命令无需通过JDBCCode读取CSV文件,只建议回答。请加上解释。此外,代码的格式可以在一行之前添加4个空格。
CSVDataAdapter CSVda = new CSVDataAdapter(@"c:\MyFile.csv");

bool InclHeader = true;

CSVda.Update(MyDataSet,"MyTable",InclHeader);
public void LoadCheckFiletoDatabase(string checkFilePath)
        {
            DataTable tempTable = GetDataTableFromCsv(checkFilePath);

            foreach (DataRow DataR in this.memDataTable.Columns)
            {
                Dictionary<string, object> Dic = new Dictionary<string, object>();
                foreach (DataColumn DataCol in this.memDataTable.Columns)
                {
                    string field = DataCol.ColumnName.ToString();
                    object value = (string)DataR[DataCol].ToString();
                    Dic.Add(field, value);                   
                }
                using (SQLiteConnection sQLiteConnection = new SQLiteConnection("data source=" + databasepath))
                {

                     using (SQLiteCommand sQLiteCommand = new SQLiteCommand(sQLiteConnection))
                     {
                        System.Data.SQLite.SQLiteHelper sQLiteHelper = new SQLiteHelper(sQLiteCommand);
                        sQLiteHelper.BeginTransaction();
                        sQLiteHelper.Insert(tempTable.TableName, Dic);
                     }
                }    
            }
        public static DataTable GetDataTableFromCsv(string path)
        {
            string pathOnly = Path.GetDirectoryName(path);
            string fileName = Path.GetFileName(path);

            string sql = @"SELECT * FROM [" + fileName + "]";

            using(OleDbConnection connection = new OleDbConnection(
                      @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + 
                      ";Extended Properties=\"Text;HDR=" + "Yes" + "\""))
            using(OleDbCommand command = new OleDbCommand(sql, connection))
            using(OleDbDataAdapter adapter = new OleDbDataAdapter(command))
            {
                DataTable dataTable = new DataTable();
                dataTable.Locale = CultureInfo.CurrentCulture;
                adapter.Fill(dataTable);
                dataTable.TableName = fileName.TrimEnd(new char[] {'.','c','s','v'});
                return dataTable;
            }            
        }
Process proc = new Process {
    StartInfo = new ProcessStartInfo {
        FileName = @"loadcsvtosqlite.bat",
        Arguments = @"",
        UseShellExecute = true,
        RedirectStandardOutput = false,
        CreateNoWindow = true
    }
};
proc.Start();
proc.WaitForExit();
sqlite3.exe "db name" < loadcsv.sql
drop table if exists <table name>;
create table <table name> (field1 datatype, field2 datatype ....);
.separator ","
.import <csv file name> <table name>