SqlBulkCopy ColumnMapping Argumentexception

columnmappings csv sqlbulkcopy

Domanda

il seguente codice mi dà una argumentexception dicendo che la colonna sonora "e_partnerid", che è chiaramente nel csv, non esiste. Ho la sensazione che il Delimitatore non sia impostato correttamente o qualcosa del genere e ho provato a cambiare un po 'il connectiontring, ma ottengo lo stesso errore.

static DataTable GetDataTableFromCsv(string path, string csvSelection, bool isFirstRowHeader)
    {
        string header = isFirstRowHeader ? "Yes" : "No";


        string pathOnly = Path.GetDirectoryName(path);
        string fileName = Path.GetFileName(path);
        //string sql = @"SELECT " + csvSelection + " FROM [" + fileName + "];";
        string sql = @"SELECT " + "*" + " FROM [" +  fileName  + "];";

        using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties=\"Text;HDR=" + header + ";FMT=Delimited(;)\""))
        using (OleDbCommand command = new OleDbCommand(sql, connection))
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            DataTable dataTable = new DataTable();
            dataTable.Locale = CultureInfo.CurrentCulture;
            adapter.Fill(dataTable);
            return dataTable;
        }

    }

Io uso ; come Delimitatore all'interno del csv e persino impostarlo nel connstring, ma sempre la stessa eccezione.

Risposta accettata

Avevo bisogno di creare uno schema.ini che descriva le colonne:

private static void writeSchema(DataColumnCollection columns, string csvDir, string csvFileName)
    {
        FileStream fsOutput =
                 new FileStream(csvDir + "\\schema.ini",
                                     FileMode.Create, FileAccess.Write);
        StreamWriter srOutput = new StreamWriter(fsOutput);

        srOutput.WriteLine("[" + csvFileName + "]");
        int i = 1;
        foreach (DataColumn item in columns)
        {
            srOutput.WriteLine("Col" + i + "=\"" + item.ToString() + "\" Text");
            i++;
        }
        srOutput.Close();
        fsOutput.Close();
    }


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow