2017-03-13 57 views
0

ExcelをデータベースにインポートするためのC#コードがいくつかありますが、最初のシート(Sheet1)からSQL Serverデータベースにのみインポートできます。 Excelファイルの2番目のシート(Sheet2)からデータをデータベースにインポートします。私にそのことを教えるためにコードを修正してください。C#特定のExcelシートからSQL Serverにデータをインポート

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

     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) 
     { 
      //Default start value of foreach statement is 0 
      //Please tell me: How to count dr from 1 instead of 0??? 
      foreach (DataRow dr in table.Rows) 
      { 
       //if index of dr==1, then continue 
       if (table.Rows.IndexOf(dr) == 0) 
       { 
        continue; 
       } 

       test addtable = new test() 
       { 
        id = Convert.ToInt32(dr[0]), 
        name = Convert.ToString(dr[1]), 
        surname = Convert.ToString(dr[2]), 
        age = Convert.ToInt32(dr[3]) 
       }; 

       conn.tests.InsertOnSubmit(addtable); 
      } 
     } 

     conn.SubmitChanges(); 
     excelReader.Close(); 
     stream.Close(); 

     MessageBox.Show("Import table completed!"); 
} 
+0

インデックスはゼロから始まります(0)。ブック内に "Second"シートを取得するには(もしあれば) 'result.Tables [1]'を試してみてください...あなたのコードはすべてのシートをループしているようです。 – JohnG

+0

可能な回答と同様の質問を見る[ここ](http://stackoverflow.com/questions/21849756/excel-data-reader-issues-column-names-and-sheet-selection) – Frederic

答えて

1

スプレッドシートSheet2のからデータを取得するために探していると仮定すると、これは動作するはずです:

DataSet result = excelReader.AsDataSet(); 
while (excelReader.NextResult()) 
{ 
    if (excelReader.Name == "Sheet2") 
    { 
     result = excelReader.AsDataSet(); 
     break; 
    } 
} 
関連する問題