C# 如何将CSV文件大容量插入SQLite C
我见过类似的问题,但没有一个讨论如何将CSV文件插入SQLite。我能想到的唯一一件事是使用CSVDataAdapter并填充SQLiteDataSet,然后使用SQLiteDataSet更新数据库中的表: 我找到的唯一用于CSV文件的DataAdapter实际上不可用: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
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>