2015-12-08 2 views
2

Я получил сообщение об ошибке ниже, когда пытался загрузить файл csv в таблицу SQL Server, используя C# (файл csv не имеет заголовка). Сообщение об ошибке: «Столбец с именем 'уже принадлежит этому DataTable'Загрузить CSV-файл в таблицу sql-сервера с помощью C# -

Я попытался найти некоторые решения где-то в Интернете, но я действительно застрял в нем. Мой код:

SqlConnection con = new SqlConnection(@"server=.;Initial Catalog=myDtabase;Integrated Security=SSPI;"); 

      string filepath = @"c:\\my_CSV_file.csv"; 

      StreamReader sr = new StreamReader(filepath); 

      string line = sr.ReadLine(); 
      string[] value = line.Split(','); 
      DataTable dt = new DataTable(); 
      DataRow row; 

      foreach (string dc in value) 
      { 
       dt.Columns.Add(new DataColumn(dc)); 
      } 

      while (!sr.EndOfStream) 
      { 
       value = sr.ReadLine().Split(','); 
       if (value.Length == dt.Columns.Count) 
       { 
        row = dt.NewRow(); 
        row.ItemArray = value; 
        dt.Rows.Add(row); 
       } 
      } 

      SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock); 
      bc.DestinationTableName = "my_SQLServer_Table"; 
      bc.BatchSize = dt.Rows.Count; 
      con.Open(); 
      bc.WriteToServer(dt); 
      bc.Close(); 
      con.Close(); 
+2

являются ваши поля, заключенная в двойные кавычки '» «' – MethodMan

+0

Вы активизировали через код с помощью отладчика, чтобы увидеть, если вы добавив тот же столбец более одного раза? –

+0

покажите нам некоторые примеры данных из вашего CSV-файла. Возможно, первые несколько строк. –

ответ

2

Я думаю, что эта ссылка поможет вам это сделать.

http://forums.asp.net/t/1695615.aspx

Как обычно, есть более чем один способ кожи кошки. Итак, если вам не нравится решение, перечисленное выше, попробуйте этот скрипт, который, как я знаю, будет работать на вас.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using System.Data.SqlClient; 
using System.Data.OleDb; 
using System.Configuration; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

      string server = "EXCEL-PC\\EXCELDEVELOPER"; 
      string database = "AdventureWorksLT2012"; 
      string SQLServerConnectionString = String.Format("Data Source={0};Initial Catalog={1};Integrated Security=SSPI", server, database); 


      string CSVpath = @"C:\Users\Ryan\Documents\Visual Studio 2010\Projects\Bulk Copy from CSV to SQL Server Table\WindowsFormsApplication1\bin"; // CSV file Path 
      string CSVFileConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};;Extended Properties=\"text;HDR=Yes;FMT=Delimited\";", CSVpath); 

      var AllFiles = new DirectoryInfo(CSVpath).GetFiles("*.CSV"); 
      string File_Name = string.Empty; 

      foreach (var file in AllFiles) 
      { 
       try 
       { 
        DataTable dt = new DataTable(); 
        using (OleDbConnection con = new OleDbConnection(CSVFileConnectionString)) 
        { 
         con.Open(); 
         var csvQuery = string.Format("select * from [{0}]", file.Name); 
         using (OleDbDataAdapter da = new OleDbDataAdapter(csvQuery, con)) 
         { 
          da.Fill(dt); 
         } 
        } 

        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SQLServerConnectionString)) 
        { 
         bulkCopy.ColumnMappings.Add(0, "MyGroup"); 
         bulkCopy.ColumnMappings.Add(1, "ID"); 
         bulkCopy.ColumnMappings.Add(2, "Name"); 
         bulkCopy.ColumnMappings.Add(3, "Address"); 
         bulkCopy.ColumnMappings.Add(4, "Country"); 
         bulkCopy.DestinationTableName = "AllEmployees"; 
         bulkCopy.BatchSize = 0; 
         bulkCopy.WriteToServer(dt); 
         bulkCopy.Close(); 
        } 

       } 
       catch(Exception ex) 
        { 
         MessageBox.Show(ex.Message, "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
        } 
      } 
     } 
    } 
} 
+0

Спасибо ryguy72 !! – ayoub

Смежные вопросы