Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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插入数据以访问数据库_C#_Sql_Visual Studio_Ms Access_Csv - Fatal编程技术网

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

C# 如果列名和顺序不同,如何从csv插入数据以访问数据库,c#,sql,visual-studio,ms-access,csv,C#,Sql,Visual Studio,Ms Access,Csv,它是用c语言编程的。 我正在选择csv文件并将其插入access db。我说,csv文件中有6列,如ID、FName、LName、Address、Zipcode、cell number,顺序相同。在access中,我的列是按相同顺序排列的FirstName、LastName、S_NO、zip_code。如何导入此csv文件以访问数据库,如果列名不同,顺序也不同。我如何实现这个??请建议。 我尝试了以下代码: enter code here 数据集da=新数据集; 尝试 {

它是用c语言编程的。 我正在选择csv文件并将其插入access db。我说,csv文件中有6列,如ID、FName、LName、Address、Zipcode、cell number,顺序相同。在access中,我的列是按相同顺序排列的FirstName、LastName、S_NO、zip_code。如何导入此csv文件以访问数据库,如果列名不同,顺序也不同。我如何实现这个??请建议。 我尝试了以下代码:

enter code here
数据集da=新数据集; 尝试 {

            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

您可以为不需要的字段传递null。

使用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语句将文本分开,并创建参数对象数组,然后在数组中循环,将参数添加到发送到数据库的每个insert语句中

像这样

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();
        }

    }
}

您好,nikky,您在这里遇到了这个问题。最好在代码问题中包含一些代码。谢谢Remou。添加了我试图导入到access的代码。是的。但是在csv文件中,我的列名和顺序与access文件列名和顺序不同。这就是问题所在。不是。只需在如上所示,插入和选择的顺序相同。它们在表或csv中的顺序无关紧要。但csv和access文件的主键应相同?您正在尝试运行更新而不是追加,对吗?如果您有自动编号ID并希望追加,请不要将ID作为字段包含在任意一侧。But,我的值不是静态的。这些值来自.csv文件,列名称和顺序与access文件不同。让我看看我是否理解您的意思。您的意思是csv中的顺序或列名可以从csv更改为csv,还是csv中的列顺序与access数据库不同,但通过al一致l csv的。如果是后者,那么我的解决方案应该有效。您只需确保存储在OLEDBPParameter中的值具有与查询中的值相对应的短名称ex:@fn。传递到AddRange方法中的OLEDBPParameters的顺序无关紧要。如果是前者,则需要更多的思考和研究我有一个查找表。让我澄清一下。我在csv文件中有firstname、Lastname、empid作为列,在access中有fname、lname、e_id作为列。现在,我想在access中插入csv文件数据。但是,列名是不同的。我该怎么做?只要列顺序不从csv更改为csv,我的解决方案就可以工作了。你所需要的是d要做的是将传递到OLEDB参数的数组位置与传递到查询中的短名称相关联。数组位置对应于csv文件中的列。