2016-11-15 4 views
-1

ボタンをクリックすると、ExcelファイルをSQL Serverテーブルにエクスポートしようとしています。私の次の機能は、OpenFileDialogてExcelファイルをつかむ、それを選択してからに関連するコンテンツをアップロードするだろうものでなければならないものですC#ボタンでSQL Server ExpressにExcelをクリック

private void button1_Click(object sender, EventArgs e) 
{ 
    string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True"; 
    string query = "CREATE TABLE [dbo].[" + textBox1.Text + "](" + "[Code] [varchar] (7) NOT NULL," + 
     "[Description] [varchar] (38) NOT NULL," + "[NDC] [varchar] (12) NULL, " + 
     "[Supplier Code] [varchar] (38) NOT NULL," + "[UOM] [varchar] (8) NULL," + "[Size] [varchar] (8) NULL,)"; 

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     SqlCommand command = new SqlCommand(query, connection); 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
} 

:まず私は、クリック時にテーブルを作成することになり、私の最初のボタンを作成しました

private void button2_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog ope = new OpenFileDialog(); 
    ope.Filter = "Excel Files |*.xlsx;*.xlsm"; 

    if (ope.ShowDialog() == DialogResult.Cancel) 
     return; 

    FileStream stream = new FileStream(ope.FileName, FileMode.Open); 
    IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
    DataSet result = excelReader.AsDataSet(); 

    DataClasses1DataContext conn = new DataClasses1DataContext(); 

    foreach (DataTable table in result.Tables) 
    { 
     foreach (DataRow dr in table.Rows) 
     { 
      test addtable = new test() 
       { 
        test_id = Convert.ToString(result[0]); 
        test_name = Convert.ToString(dr[1]); 
       }; 
      conn.tests.inInsertOnSubmit(addtable); 
     } 
    } 
} 

私の問題は、それが動作するということですが、私は私の最初のボタンのクリックから作成されたテーブルとのリレーションシップを作成した場合、現在、それだけで動作します。私のボタンクリックabove.Thisから作成されたテーブルは、機能の重要な部分であります私のC#コードで。たとえば。私は私のSQL Serverテーブルから "test_id"と "test_name"という名前の列名を持っているとしましょう。私はそのテーブルをつかんで、C#コードに入れて列名を一致させなければなりません。私が目指しているのは、ボタンをクリックしてテーブルを作成し、その後、レコードをいくつかのレコードからデータを読み込むたびにそのテーブルにエクスポートするということです。これは非常に不便です。私は、データベース管理者からの対話を排除したい。私がしたいことは、テーブルを作成し、コード内で手作業で関係を作成することなく、同じテーブルにExcelファイルをエクスポートすることです。追加情報:すべての個々のExcelシートは、毎回同じ列セットを持ちます。同じままです。それが役に立たない場合はわからない

+0

Excelのヘッダーが常に列の名前と一致しないことを意味しますか? – McNets

+0

受け取ったExcelファイルは常に同じものですが、このプログラムの場合は、以前の関係をC#コード内に作成することなく、Excelファイルをデータベースにエクスポートする方法を探しています。したがって、本質的には、ExcelファイルをMSSQLテーブルにエクスポートする方法を探しています – Jevon

+0

各Excelファイルごとに1つのテーブルが必要ですか、すべてのファイルが同じテーブルを共有しますか? – McNets

答えて

1

私はついにこの問題を抱えている人のために働いています。私がしたのは、Excelの拡張子ではなく、.csvファイルにファイルの種類を変更するだけでした。 Excelはあまりにも多くの問題を出していました。

private void button2_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection("Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True"); 
     string filepath = textBox2.Text; //"C:\\Users\\jdavis\\Desktop\\CRF_105402_New Port Maria Rx.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 = textBox1.Text; 
     bc.BatchSize = dt.Rows.Count; 
     con.Open(); 
     bc.WriteToServer(dt); 
     bc.Close(); 
     con.Close(); 
    } 
関連する問題