将CSV文件复制到MS Access Table

使用C#我正在尝试创建一个从特定文件夹位置读取CSV文件的控制台应用程序,并将这些记录导入MS Access Table。 一旦成功导入文件中的记录,我将删除.csv文件。

到目前为止,这就是我所拥有的:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Configuration; using System.Data; using System.Data.OleDb; using System.Globalization; namespace QuantumTester { class Program { static void Main(string[] args) { CsvFileToDatatable(ConfigurationManager.AppSettings["CSVFile"], true); } public static DataTable CsvFileToDatatable(string path, bool IsFirstRowHeader)//here Path is root of file and IsFirstRowHeader is header is there or not { string header = "Yes"; //"No" if 1st row is not header cols string sql = string.Empty; DataTable dataTable = null; string pathOnly = string.Empty; string fileName = string.Empty; try { pathOnly = Path.GetDirectoryName(ConfigurationManager.AppSettings["QuantumOutputFilesLocation"]); fileName = Path.GetFileName(ConfigurationManager.AppSettings["CSVFilename"]); sql = @"SELECT * FROM [" + fileName + "]"; if (IsFirstRowHeader) { header = "Yes"; } using (OleDbConnection connection = new OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties=\"Text;HDR=" + header + "\"")) { using (OleDbCommand command = new OleDbCommand(sql, connection)) { using (OleDbDataAdapter adapter = new OleDbDataAdapter(command)) { dataTable = new DataTable(); dataTable.Locale = CultureInfo.CurrentCulture; adapter.Fill(dataTable); } } } } finally { } return dataTable; } } } 

我可以直接将数据表保存到我在Access DB中创建的表中吗? 我该怎么做呢? 任何帮助都会很棒

您可以再次运行查询,从CSV文件创建新表或附加到现有表的Access连接。

创建表的SQL类似于:

 SELECT * INTO NewAccess FROM [Text;FMT=Delimited;HDR=NO;DATABASE=Z:\Docs].[Table1.csv] 

要附加到表格:

 INSERT INTO NewAccess SELECT * FROM [Text;FMT=Delimited;HDR=NO;DATABASE=Z:\Docs].[Table1.csv] 

终于有了这个工作,这就是我所拥有的 – 希望它在将来帮助其他人:

 public static DataTable CsvFileToDatatable(string path, bool IsFirstRowHeader)//here Path is root of file and IsFirstRowHeader is header is there or not { string header = "Yes"; //"No" if 1st row is not header cols string query = string.Empty; DataTable dataTable = null; string filePath = string.Empty; string fileName = string.Empty; try { //csv file directory filePath = Path.GetDirectoryName(ConfigurationManager.AppSettings["QuantumOutputFilesLocation"]); //csv file name fileName = Path.GetFileName(ConfigurationManager.AppSettings["CSVFilename"]); query = @"SELECT * FROM [" + fileName + "]"; if (IsFirstRowHeader) header = "Yes"; using (OleDbConnection connection = new OleDbConnection((@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Text;HDR=" + header + "\""))) { using (OleDbCommand command = new OleDbCommand(query, connection)) { using (OleDbDataAdapter adapter = new OleDbDataAdapter(command)) { dataTable = new DataTable(); adapter.Fill(dataTable); //create connection to Access DB OleDbConnection DBconn = new OleDbConnection(ConfigurationManager.ConnectionStrings["Seagoe_QuantumConnectionString"].ConnectionString); OleDbCommand cmd = new OleDbCommand(); //set cmd settings cmd.Connection = DBconn; cmd.CommandType = CommandType.Text; //open DB connection DBconn.Open(); //read each row in the Datatable and insert that record into the DB for (int i = 0; i < dataTable.Rows.Count; i++) { cmd.CommandText = "INSERT INTO tblQuantum (DateEntered, Series, SerialNumber, YearCode, ModelNumber, BatchNumber, DeviceType, RatedPower, EnergyStorageCapacity," + "MaxEnergyStorageCapacity, User_IF_FWRevNo, Charge_Controller_FWRevNo, RF_Module_FWRevNo, SSEGroupNumber, TariffSetting)" + " VALUES ('" + dataTable.Rows[i].ItemArray.GetValue(0) + "','" + dataTable.Rows[i].ItemArray.GetValue(1) + "','" + dataTable.Rows[i].ItemArray.GetValue(2) + "','" + dataTable.Rows[i].ItemArray.GetValue(3) + "','" + dataTable.Rows[i].ItemArray.GetValue(4) + "','" + dataTable.Rows[i].ItemArray.GetValue(5) + "','" + dataTable.Rows[i].ItemArray.GetValue(6) + "','" + dataTable.Rows[i].ItemArray.GetValue(7) + "','" + dataTable.Rows[i].ItemArray.GetValue(8) + "','" + dataTable.Rows[i].ItemArray.GetValue(9) + "','" + dataTable.Rows[i].ItemArray.GetValue(10) + "','" + dataTable.Rows[i].ItemArray.GetValue(11) + "','" + dataTable.Rows[i].ItemArray.GetValue(12) + "','" + dataTable.Rows[i].ItemArray.GetValue(13) + "','" + dataTable.Rows[i].ItemArray.GetValue(14) + "')"; cmd.ExecuteNonQuery(); } //close DB.connection DBconn.Close(); } } } } finally { } return dataTable; }