2015-12-12 12 views
5

Chcę wgrać plik Excela przez aplikację formularzy Windows w języku C# i chcę zaimportować dane do bazy danych (serwer Mysql). jak mogę to zrobić??? Utworzyłem formularz, który wymaga przesłania pliku excela do bazy danych mysql. jego dane wstawia się luzem do tabeli bazy danych.jak wgrać plik Excela do tabeli bazy danych SQL przy użyciu aplikacji z aplikacją C#

pliku

My Excel Zawierają kolumny jak USERID hasło first_name, last_name, USER_GROUP I MySQL Database (aster_users) zawierają wiele kolumn, takich jak identyfikator użytkownika, hasło first_name, last_name, USER_GROUP, kolejka, aktywny, CREATED_DATE, created_by rola ..

Muszę przesłać ten plik excela do mojej bazy danych, a inne kolumny będą puste lub puste, to nie jest sprawa.

moja forma konstrukcja jest enter image description here

Oto moja C# Kod:

using MySql.Data.MySqlClient; 
using System; 
using System.Data.SqlClient; 
using System.Windows.Forms; 

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

    String MyConString = "SERVER=******;" + 
      "DATABASE=dbs;" + 
      "UID=root;" + 
      "PASSWORD=pwsd;" + "Convert Zero Datetime = True"; 
private void BtnSelectFile_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog dlg = new OpenFileDialog(); 
     dlg.Filter = "Text files | *.csv"; 
     if (dlg.ShowDialog() == DialogResult.OK) 
     { 
      string fileName; 
      fileName = dlg.FileName; 
      txtfilepath.Text = fileName; 
     } 
     } 

private void btnUpload_Click(object sender, EventArgs e)   
{     
    string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtfileparth.Text + ";Extended Properties=\"Excel 12.0;HDR=YES;\""; 

     using (OleDbConnection connection = 
       new OleDbConnection(connectionString)) 
     { 
      OleDbCommand command = new OleDbCommand 
        ("Select * FROM [Sheet1$]", connection); 

      connection.Open(); 

      using (DbDataReader dr = command.ExecuteReader()) 
      { 
       string sqlConnectionString = MyConString; 

       using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) 
       { 
        bulkCopy.ColumnMappings.Add("[userid]", "userid"); 
        bulkCopy.ColumnMappings.Add("password", "password"); 
        bulkCopy.ColumnMappings.Add("first_name", "first_name"); 
        bulkCopy.ColumnMappings.Add("last_name", "last_name"); 
        bulkCopy.ColumnMappings.Add("user_group", "user_group"); 
        bulkCopy.DestinationTableName = "aster_users"; 
        bulkCopy.WriteToServer(dr); 
        MessageBox.Show("Upload Successfull!"); 
       } 
      } 

     } 
} 

Oto jak ja tried.i dostaje komunikat o błędzie podobny do tego

Dodatkowe informacje: Zewnętrzny tabela nie ma oczekiwanego formatu.

w tej linii connection.Open();. Jak to zrobić?

Odpowiedz

5

enter image description here

using System; 
using System.Data; 
using System.Data.OleDb; 
using System.Data.SqlClient; 
using System.Windows.Forms; 

namespace IMPORT 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    String MyConString = "SERVER=******;" + 
      "DATABASE=db;" + 
      "UID=root;" + 
      "PASSWORD=pws;"; 

private void btnSelectFile_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog openfiledialog1 = new OpenFileDialog(); 
     openfiledialog1.ShowDialog(); 
     openfiledialog1.Filter = "allfiles|*.xls"; 
     txtfilepath.Text = openfiledialog1.FileName; 
    } 
private void btnUpload_Click(object sender, EventArgs e) 
{ 
string path = txtfilepath.Text; 

     string ConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties = Excel 8.0"; 

     DataTable Data = new DataTable(); 

     using (OleDbConnection conn =new OleDbConnection(ConnString)) 
     { 
      conn.Open(); 

      OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM [dataGridView1_Data$]", conn); 
      OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); 
      adapter.Fill(Data); 

      conn.Close(); 
     } 
     string ConnStr = MyConString; 
     using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnStr)) 
     { 
      bulkCopy.DestinationTableName = "TABLE NAME"; 
      bulkCopy.ColumnMappings.Add("userid", "userid"); 
      bulkCopy.ColumnMappings.Add("password", "password"); 
      bulkCopy.ColumnMappings.Add("first_name", "first_name"); 
      bulkCopy.ColumnMappings.Add("last_name", "last_name"); 
      bulkCopy.ColumnMappings.Add("user_group", "user_group"); 
      bulkCopy.WriteToServer(Data); 
      MessageBox.Show("UPLOAD SUCCESSFULLY"); 
     } 
    } 
} 

Przykład znalezionohttp://technico.qnownow.com/bulk-copy-data-from-excel-to-destination-db-using-sql-bulk-copy/. I ERROR: Additional information: External table is not in the expected format

+0

Czy to twoje rozwiązanie, czy też wysłałeś błąd ponownie? –

1
Nie

jest awesome link, który pokazuje w jaki sposób przesłać do C# DataTable z programu Excel ... w przypadku, gdy związek umiera Dzielę procedury ....

Excel Ciągi połączeń dla wersji Diff:

private string Excel03ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'"; 
private string Excel07ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'"; 

Plik wybierz wydarzenie:

private void BtnSelectFile_Click(object sender, EventArgs e) 
    { 
     DataTable dt; 
     OpenFileDialog dlg = new OpenFileDialog(); 
     dlg.Filter = "Excel files | *.xls"; 
     if (dlg.ShowDialog() == DialogResult.OK) 
     { 
      string filePath = dlg.FileName; 
      string extension = Path.GetExtension(filePath); 
      string conStr, sheetName; 

      conStr = string.Empty; 
      switch (extension) 
      { 

       case ".xls": //Excel 97-03 
        conStr = string.Format(Excel03ConString, filePath); 
        break; 

       case ".xlsx": //Excel 07 to later 
        conStr = string.Format(Excel07ConString, filePath); 
        break; 
      } 

      //Read Data from the Sheet. 
      using (OleDbConnection con = new OleDbConnection(conStr)) 
      { 
       using (OleDbCommand cmd = new OleDbCommand()) 
       { 
        using (OleDbDataAdapter oda = new OleDbDataAdapter()) 
        { 
         dt = new DataTable(); 
         cmd.CommandText = "SELECT * From [Sheet1$]"; 
         cmd.Connection = con; 
         con.Open(); 
         oda.SelectCommand = cmd; 
         oda.Fill(dt); 
         con.Close(); 
        } 
       } 
      } 
      //Save the datatable to Database 
      string sqlConnectionString = MyConString; 
      if(dt != null) 
      {     
      using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) 
      { 
       bulkCopy.ColumnMappings.Add("[userid]", "userid"); 
       bulkCopy.ColumnMappings.Add("password", "password"); 
       bulkCopy.ColumnMappings.Add("first_name", "first_name"); 
       bulkCopy.ColumnMappings.Add("last_name", "last_name"); 
       bulkCopy.ColumnMappings.Add("user_group", "user_group"); 
       bulkCopy.DestinationTableName = "aster_users"; 
       bulkCopy.WriteToServer(dt); 
       MessageBox.Show("Upload Successfull!"); 
      } 
      } 
     } 
} 

następnie można po prostu zapisać DataTable do bazy danych MySQL, które mam nadzieję, że wiesz, jak to zrobić ... Jeśli nie możesz następnie co postaram się jak najlepiej, aby ci pomóc. Dziękuję

Nadzieja to pomaga ....

+1

Jeśli linkujące kiedyś umrze, to odpowiedź staje się mniej użyteczne. Czy w swojej odpowiedzi możesz umieścić odpowiednią treść z tego linku? (nadal cytuj źródło, tak jak Ty robisz) –

+0

Dzięki Grant ....Opublikuję zawartość linku ... – khaled4vokalz

+0

Dzięki, to byłoby znacznie lepsze. Widziałem nawet linki do rzeczy na MSDN znikają lub znikają na kilka dni. –

2

ஆர்த்தி,

Użyj poniższego String Connection Format

string File = sResponsedExcelFilePath; 

string result = Path.GetFileName(sFilePath);  

ExcelReaderConnString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + File +"\\"+ result + ";Extended Properties=Excel 12.0;"); 

Nadzieja to działa dla Ciebie.

+2

Przepraszam za niedogodność. podczas uruchamiania programu wystąpił błąd jako (Informacje dodatkowe: Aparat bazy danych Microsoft Office Access nie może otworzyć lub zapisać do pliku "C: \". Jest już otwarty wyłącznie przez innego użytkownika lub potrzebujesz uprawnień do przeglądania i zapisywania jego dane). Przepraszamy za kłopoty. – Arthi

+1

Proszę umieścić plik na innym dysku z wyjątkiem C :. Zamknij plik Excel, jeśli jest otwarty. –

1
using System; 
using System.Data; 
using System.Data.OleDb; 
using System.Data.SqlClient; 
using System.Windows.Forms; 

namespace IMPORT 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    String MyConString = "SERVER=******;" + 
      "DATABASE=db;" + 
      "UID=root;" + 
      "PASSWORD=pws;"; 

private void btnSelectFile_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog openfiledialog1 = new OpenFileDialog(); 
     openfiledialog1.ShowDialog(); 
     openfiledialog1.Filter = "allfiles|*.xls"; 
     txtfilepath.Text = openfiledialog1.FileName; 
    } 
private void btnUpload_Click(object sender, EventArgs e) 
{ 
string path = txtfilepath.Text; 

     string ConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties = Excel 8.0"; 

     DataTable Data = new DataTable(); 

     using (OleDbConnection conn =new OleDbConnection(ConnString)) 
     { 
      conn.Open(); 

      OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM [dataGridView1_Data$]", conn); 
      OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); 
      adapter.Fill(Data); 

      conn.Close(); 
     } 
     string ConnStr = MyConString; 
     using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnStr)) 
     { 
      bulkCopy.DestinationTableName = "TABLE NAME"; 
      bulkCopy.ColumnMappings.Add("userid", "userid"); 
      bulkCopy.ColumnMappings.Add("password", "password"); 
      bulkCopy.ColumnMappings.Add("first_name", "first_name"); 
      bulkCopy.ColumnMappings.Add("last_name", "last_name"); 
      bulkCopy.ColumnMappings.Add("user_group", "user_group"); 
      bulkCopy.WriteToServer(Data); 
      MessageBox.Show("UPLOAD SUCCESSFULLY"); 
     } 
    } 
} 
Powiązane problemy