如果列名和顺序不同,如何从 csv 插入数据来访问数据库

问题描述 投票:0回答:4

它使用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
c# sql visual-studio ms-access csv
4个回答
1
投票

使用 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]

1
投票

我将使用 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();
        }

    }
}

0
投票

不需要的字段可以传null..


0
投票

如果有人像我一样最终来到这里,那就说明发生了变化。我不知道这种情况何时发生改变。 Fionnuala 的答案是正确的,但就我而言(.NET Framework 4.8 WPF 项目中的 C#),它无法单独使用他们的示例代码。我不断收到错误“没有为一个或多个必需参数给出值”。我发现here我需要一个名为 schema.ini 的文件,该文件与 .csv 文件位于同一目录中。对我来说,只需要两行就可以让一切正常工作。

[myfilename.csv]
Format=CSVDelimited
© www.soinside.com 2019 - 2024. All rights reserved.