2015-12-12 15 views
5

Windowsフォームアプリケーションを使用してExcelファイルをC#にアップロードし、データベース(Mysqlサーバ)にインポートしたいと考えています。どうやってやるの???私はmysqlデータベースにExcelファイルをアップロードする必要があるフォームを作成しました。その一括データをデータベーステーブルに挿入します。C#Windowsフォームアプリケーションを使用してExcelデータベーステーブルにExcelファイルをアップロードする方法

私のExcelファイルは、ユーザーID、パスワード、FIRST_NAME、LAST_NAME、USER_GROUPと MySQLデータベーステーブル(aster_users)のような列を含むが、ユーザーID、パスワード、FIRST_NAME、LAST_NAME、USER_GROUP、キュー、アクティブ、created_date、CREATED_BY、役割のような多くの列が含まれています..

私はそのエクセルファイルをデータベースにアップロードする必要があり、他の列は空でも空でも問題はありません。

マイフォームのデザインはここ enter image description here

である私のC#のコードです:外部:ここ

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!"); 
       } 
      } 

     } 
} 

は、私はこの

のようなエラーメッセージの追加情報を得たtried.i方法ですテーブルが期待どおりのフォーマットではありません。

この行connection.Open();。これはどうすれば完了できますか?

答えて

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

例はhttp://technico.qnownow.com/bulk-copy-data-from-excel-to-destination-db-using-sql-bulk-copy/を発見しました。 そして ERROR: Additional information: External table is not in the expected format

+0

これはあなたのソリューションですか、あなたは再びエラーを投稿しましたか? –

1

そこは....場合にはリンクが、私は手順を共有しています死ぬ... ExcelからC#のデータテーブルにアップロードする方法を示しawesome linkある差分バージョンの

Excelの接続文字列:

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'"; 

ファイルselectイベント:

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!"); 
      } 
      } 
     } 
} 

次に、あなたはちょうど私はあなたがする方法を知っている願っていますMySQLデータベースにデータテーブルを保存することができます...あなたは、共同することができない場合私はあなたを助けるために最善を尽くします。あなたはこのことができます

希望....

+1

そのリンクがこれまでに死亡した場合、この答えはあまり便利になります。そのリンクの関連コンテンツを回答に含めることはできますか? (あなたがやっているように、まだソースを引用しています) –

+0

おかげでグラント....私はリンクの内容を投稿します.... – khaled4vokalz

+0

ありがとう、それはずっと良いでしょう。私はMSDN上のものへのリンクが消えたり、数日間落ちるのを見たことさえあります。 –

2

ஆர்த்தி、

使用以下は、接続文字列の書式

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;"); 

希望これはあなたのために働くありがとうございます。

+2

ご迷惑をおかけして申し訳ございません。プログラムを実行している間、私は(追加情報として、エラーが発生しました:Microsoft OfficeのAccessデータベースエンジンは、オープンできないか、ファイルへの書き込み「C:\」。それは、すでに別のユーザーによって排他的に開かれている、またはあなたが閲覧し、その書き込みの権限が必要データ)。ごめんなさい。 – Arthi

+1

C:以外のドライブにファイルを保存してください。開かれている場合は、Excelファイルを閉じます。 –

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"); 
     } 
    } 
} 
関連する問題