2016-07-27 5 views
-3

私はthisの参照でC#を使用してSQLにExcelデータをインポートしています。しかし、私はこれをコンソールプログラムにしたい。C#Console ExcelからSQLへのインポート

どうすれば助けてください。

ありがとうございます。

コード:

protected void Upload(object sender, EventArgs e) 

{// アップロードし、ファイルを保存し 文字列excelPath = Server.MapPathの( "〜/ファイル/")+ Path.GetFileName(FileUpload1.PostedFile.FileName)。 FileUpload1.SaveAs(excelPath);

string conString = string.Empty; 
string extension = Path.GetExtension(FileUpload1.PostedFile.FileName); 
switch (extension) 
{ 
    case ".xls": //Excel 97-03 
     conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; 
     break; 
    case ".xlsx": //Excel 07 or higher 
     conString = ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString; 
     break; 

} 
conString = string.Format(conString, excelPath); 
using (OleDbConnection excel_con = new OleDbConnection(conString)) 
{ 
    excel_con.Open(); 
    string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString(); 
    DataTable dtExcelData = new DataTable(); 

    //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default. 
    dtExcelData.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)), 
      new DataColumn("Name", typeof(string)), 
      new DataColumn("Salary",typeof(decimal)) }); 

    using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con)) 
    { 
     oda.Fill(dtExcelData); 
    } 
    excel_con.Close(); 

    string consString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(consString)) 
    { 
     using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) 
     { 
      //Set the database table name 
      sqlBulkCopy.DestinationTableName = "dbo.tblPersons"; 

      //[OPTIONAL]: Map the Excel columns with that of the database table 
      sqlBulkCopy.ColumnMappings.Add("Id", "PersonId"); 
      sqlBulkCopy.ColumnMappings.Add("Name", "Name"); 
      sqlBulkCopy.ColumnMappings.Add("Salary", "Salary"); 
      con.Open(); 
      sqlBulkCopy.WriteToServer(dtExcelData); 
      con.Close(); 
     } 
    } 
} 

}

UPDATE

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.IO; 
using System.Data; 
using System.Data.OleDb; 
using System.Data.SqlClient; 
using System.Configuration; 


public partial class CS : System.Web.UI.Page 
{ 
    static void LoadExcelMain() 
{ 
    //Upload and save the file 
    string excelPath = Server.MapPath("~/Files/") + Path.GetFileName(FileUpload1.PostedFile.FileName); 
    FileUpload1.SaveAs(excelPath); 

    string conString = string.Empty; 
    string extension = Path.GetExtension(excelPath); 
    switch (extension) 
    { 
     case ".xls": //Excel 97-03 
      conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; 
      break; 
     case ".xlsx": //Excel 07 or higher 
      conString = ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString; 
      break; 

    } 
    conString = string.Format(conString, excelPath); 
    using (OleDbConnection excel_con = new OleDbConnection(conString)) 
    { 
     excel_con.Open(); 
     string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString(); 
     DataTable dtExcelData = new DataTable(); 

     //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default. 
     dtExcelData.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)), 
       new DataColumn("Name", typeof(string)), 
       new DataColumn("Salary",typeof(decimal)) }); 

     using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con)) 
     { 
      oda.Fill(dtExcelData); 
     } 
     excel_con.Close(); 

     string consString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(consString)) 
     { 
      using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) 
      { 
       //Set the database table name 
       sqlBulkCopy.DestinationTableName = "dbo.tblPersons"; 

       //[OPTIONAL]: Map the Excel columns with that of the database table 
       sqlBulkCopy.ColumnMappings.Add("Id", "PersonId"); 
       sqlBulkCopy.ColumnMappings.Add("Name", "Name"); 
       sqlBulkCopy.ColumnMappings.Add("Salary", "Salary"); 
       con.Open(); 
       sqlBulkCopy.WriteToServer(dtExcelData); 
       con.Close(); 
      } 
     } 
    } 
} 
    static void Main(string[] args) 
    { 
     LoadExcelMain(); 
    } 
} 

UPDATED V2

using System.IO; 
using System.Data; 
using System.Data.OleDb; 
using System.Data.SqlClient; 
using System.Configuration; 

public partial class CS 
{ 
    static void LoadExcelMain(string excelPath) 
    { 

     string conString = string.Empty; 
     string extension = Path.GetExtension(excelPath); 
     switch (extension) 
     { 
      case ".xls": //Excel 97-03 
       conString = ConfigurationManager.ConnectionStrings["Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\sample.xlsx;Extended Properties='Excel 8.0;HDR=YES';"].ConnectionString; 
       break; 
      case ".xlsx": //Excel 07 or higher 
       conString = ConfigurationManager.ConnectionStrings["Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\sample.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES'"].ConnectionString; 
       break; 

     } 
     conString = string.Format(conString, excelPath); 
     using (OleDbConnection excel_con = new OleDbConnection(conString)) 
     { 
      excel_con.Open(); 
      //read sheet named TABLE_NAME from excell , with columns : Name , Salary 
      string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString(); 
      DataTable dtExcelData = new DataTable(); 

      //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default. 
      dtExcelData.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)), 
      new DataColumn("Name", typeof(string)), 
      new DataColumn("Salary",typeof(decimal)) }); 

      using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con)) 
      { 
       oda.Fill(dtExcelData); 
      } 
      excel_con.Close(); 

      string consString = ConfigurationManager.ConnectionStrings["Data Source=10.90.76.187\\ServDB;Initial Catalog=TestDB;user id=DBUserID;[email protected][email protected];MultipleActiveResultSets=True;App=EntityFramework""].ConnectionString; 
      using (SqlConnection con = new SqlConnection(consString)) 
      { 
       using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) 
       { 
        //Set the database table name 
        //load in table named "dbo.employee" with columns: Id ,Name, Salary 
        sqlBulkCopy.DestinationTableName = "testdb.dbo.employee"; 

        //[OPTIONAL]: Map the Excel columns with that of the database table 
        sqlBulkCopy.ColumnMappings.Add("Id", "PersonId"); 
        sqlBulkCopy.ColumnMappings.Add("Name", "Name"); 
        sqlBulkCopy.ColumnMappings.Add("Salary", "Salary"); 
        con.Open(); 
        sqlBulkCopy.WriteToServer(dtExcelData); 
        con.Close(); 
       } 
      } 
     } 
    } 
    static void Main(string[] args) 
    { 
     LoadExcelMain("C:\\sample.xlsx"); 
    } 
} 
+0

コンソールアプリケーションであることからそれを停止するいただきましたか!? – BugFinder

+0

@BugFinderエラー "型または名前空間の名前 'UIが名前空間に存在しません"が発生するためです。そして、それは元々はASPアプリケーションであると信じています – Theo

+0

ここではあなたのコードには「UI」は言及されていませんので、明らかにその問題はあなたが提供したコードにはありません.. – BugFinder

答えて

0

方法

protected void Upload(object sender, EventArgs e) 

は、GUIの場合に使用されます。 コンソールの場合、名前をたとえばに変更します。

static void LoadExcelMain() 
    { 
     your code here 
    } 

でメソッドを呼び出します。ここで

さ:編集あなたが

//modify : 
string extension = Path.GetExtension(FileUpload1.PostedFile.FileName); 
//to be 
string extension = Path.GetExtension(excelPath);  

//You need to add entry in App.Config for the connectionString 

//You can't to use = Server.MapPath in console application 
//Review carefully the mapping of columns in the table in the csv file 

、ファイルの拡張子を取得するには、Webアプリケーションで使用される方法を変更する必要が

static void Main(string[] args) 
{ 
    LoadExcelMain(); 
} 

あなたの投稿コードがremoに変更されました構文エラーが

のConnectionString、TABLE_NAME、テーブルの構造を変更すると、それを試してみまし

using System.IO; 
using System.Data; 
using System.Data.OleDb; 
using System.Data.SqlClient; 
using System.Configuration; 

public partial class CS 

{

// loading excel file into sql server 

static void LoadExcelMain(string excelPath) 
{ 

    string conString = string.Empty; 
    string extension = Path.GetExtension(excelPath); 
    switch (extension) 
    { 
     case ".xls": //Excel 97-03 
      conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; 
      break; 
     case ".xlsx": //Excel 07 or higher 
      conString = ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString; 
      break; 

    } 
    conString = string.Format(conString, excelPath); 
    using (OleDbConnection excel_con = new OleDbConnection(conString)) 
    { 
     excel_con.Open(); 
     //read sheet named TABLE_NAME from excell , with columns : Name , Salary 
     string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString(); 
     DataTable dtExcelData = new DataTable(); 

     //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default. 
     dtExcelData.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)), 
      new DataColumn("Name", typeof(string)), 
      new DataColumn("Salary",typeof(decimal)) }); 

     using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con)) 
     { 
      oda.Fill(dtExcelData); 
     } 
     excel_con.Close(); 

     string consString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(consString)) 
     { 
      using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) 
      { 
       //Set the database table name 
       //load in table named "dbo.tblPersons" with columns: Id ,Name, Salary 
       sqlBulkCopy.DestinationTableName = "dbo.tblPersons"; 

       //[OPTIONAL]: Map the Excel columns with that of the database table 
       sqlBulkCopy.ColumnMappings.Add("Id", "PersonId"); 
       sqlBulkCopy.ColumnMappings.Add("Name", "Name"); 
       sqlBulkCopy.ColumnMappings.Add("Salary", "Salary"); 
       con.Open(); 
       sqlBulkCopy.WriteToServer(dtExcelData); 
       con.Close(); 
      } 
     } 
    } 
} 
static void Main(string[] args) 
{ 
    LoadExcelMain("myfile.xls"); 
} 
} 
+0

私が初心者であることを説明して理解してくれてありがとう。これで現在のコードが変更され、 – Theo

+0

へようこそ。あなたが直面している問題のコメント。 –

+0

私は自分のコードにあるものを有効にし、すべてのUI関連を削除しましたが、問題は引き続き発生します。 – Theo

関連する問題