2017-05-20 15 views
0

Excelファイルの6番目の行からデータをインポートします。 Excelの1行目から5行目の見出しがあります。データをインポートすると、Excelの2行目にデータがないため、値はnullです。代わりに一括コピーのExcelファイルの6行目のデータをSQL Serverに読み込む方法は?

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(int)), 
    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.tblPerson"; 

      //[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(); 
     } 
    } 
} 

答えて

0

、私はこれをしようとしていた行

for (int i = 0; i < dtExcelData.Rows.Count; i++) 
    { 
     sql = sql + "insert into your_table_name (PersonId, Name, Salary) values('" 
       + dtExcelData.Rows[i]["Id"].ToString().Trim() + "','" 
       + dtExcelData.Rows[i]["Name"].ToString().Trim() + "','" 
       + dtExcelData.Rows[i]["Salary"].ToString().Trim() + "')"; 
    //execute the sql here in try catch 
    } 
+0

によってdtExcelData行のデータを挿入することができます。 (OleDbDataAdapter oda =新しいOleDbDataAdapter( "SELECT * FROM [" + sheet1 + "$" + "A7:ZZ]"、excel_con)) { oda.Fill(dtExcelData); } excel_con.Close();しかし、Microsoft Office Accessデータベースエンジンが 'Sheet1 $$ A7:ZZ'というオブジェクトを見つけられなかったため、エラーが発生しました。オブジェクトが存在し、その名前とパス名のスペルが正しいことを確認してください。 – HAPPYsukh

+0

私は解決策を得ました。私は(OleDbDataAdapter oda = new OleDbDataAdapter( "SELECT * FROM [" + sheet1 + "A6:F]"、excel_con)を使ってコードを変更しました。 – HAPPYsukh

関連する問題