它使用c#编程。 我正在选择 csv 文件并将其插入到访问数据库中。我说过,csv 文件中有 6 列,如 ID、FName、LName、地址、邮政编码、单元格编号,顺序相同。在访问中,我的列是名字、姓氏、S_NO、邮政编码(顺序相同)。我如何导入这个 csv 文件来访问数据库,如果列名不同,顺序也不同。我怎样才能实现这个?请建议。 我尝试了以下代码:
enter code here
DataSet da = new DataSet(); 尝试 {
da = this.ConnectCSV(strCSVFile);
string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\EmpApp\\EmpData.accdb;";
OleDbConnection conn = new OleDbConnection(connstring);
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
conn.Open();
for (int i = 0; i <= da.Tables["Ss"].Rows.Count - 1; i++)
{
for (int j = 1; j <= da.Tables["Ss"].Columns.Count - 1; j++)
{
cmd.CommandText = "Insert into EMP_DOWNLOAD ( ID,Company_name,month_billed,year,start_date,end_date,Designation"
+ ") values(" + (i + 1) + ",'"
+ da.Tables["Ss"].Rows[i].ItemArray.GetValue(0) + "',"
+ da.Tables["Ss"].Rows[i].ItemArray.GetValue(8) +
da.Tables["Ss"].Rows[i].ItemArray.GetValue(9) + ")";
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
btnUpload.Enabled = false;
}
enter code here
使用 MS Access,您可以直接从 CSV 运行到表格:
INSERT INTO EMP_DOWNLOAD (ID, Forename, LastName, Address, Zip_Code )
SELECT ID, FName, LName, Address, Zipcode
FROM [Text;Database=z:\docs\;HDR=yes].[importfilename.csv]
我将使用 Linq 语句来分解文本并创建参数对象的数组,然后循环遍历数组,将参数添加到发送到数据库的每个插入语句。
像这样
var csvParams = (from line in System.IO.File.ReadLines("fileName.csv")
from cell in line.Split(',').AsEnumerable()
select new[]
{
new OleDbParameter("@fn", cell[1]),
new OleDbParameter("@ln", cell[2]),
new OleDbParameter("@sn", cell[3]),
new OleDbParameter("@zc", cell[4])
});
using( OleDbConnection conn = new OleDbConnection("CONNECTION STRING GOES HERE"))
{
foreach (var person in csvParams)
{
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO People(FirstName, LastName, S_NO, zip_code) VALUES (@fn, @ln, @sn, @zc)";
cmd.Parameters.AddRange( (OleDbParameter[]) person);
cmd.ExecuteNonQuery();
}
}
}
不需要的字段可以传null..
如果有人像我一样最终来到这里,那就说明发生了变化。我不知道这种情况何时发生改变。 Fionnuala 的答案是正确的,但就我而言(.NET Framework 4.8 WPF 项目中的 C#),它无法单独使用他们的示例代码。我不断收到错误“没有为一个或多个必需参数给出值”。我发现here我需要一个名为 schema.ini 的文件,该文件与 .csv 文件位于同一目录中。对我来说,只需要两行就可以让一切正常工作。
[myfilename.csv]
Format=CSVDelimited