2017-10-13 12 views
0

ExcelコアからASP.NETコアMVCを使用してSQL Serverにデータをインポートしようとしました。しかし、このコードは単に実行されません:oledbを使用せずにExcelファイルデータをSQL Serverにアップロードする方法

[HttpPost] 
public IActionResult Index(ICollection<IFormFile> files) 
{ 
    string line; 

    using (SqlConnection con = new SqlConnection(@"Data Source=NT;Initial Catalog=StudentDB;Integrated Security=True")) 
    { 
     con.Open(); 

     using (StreamReader file = new StreamReader("TestFile.xlsx")) 
     { 
      while ((line = file.ReadLine()) != null) 
      { 
       string[] fields = line.Split(','); 

       SqlCommand cmd = new SqlCommand("INSERT INTO Persons(ContactID, FirstName, SecondName, Age) VALUES (@contactid, @firstname, @secondname, @age)", con); 
       cmd.Parameters.AddWithValue("@id", fields[0].ToString()); 
       cmd.Parameters.AddWithValue("@firstname", fields[1].ToString()); 
       cmd.Parameters.AddWithValue("@secondname", fields[2].ToString()); 

       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 

    return View(); 
} 
+0

このコードで何が問題になっていますか?エラーはありますか?コードをデバッグして、何が起きているのか確認しましたか? –

+0

( "TestFile.xlsx")は、文字列をSystem.IO.Streamに変更できません – ohhhkeo

+0

ExcelファイルデータをアップロードしてVisual Studio 2017のsqlserverに保存する方法をコーディングするのに役立ちますか? 私はどこから始めるべきか分かりません – ohhhkeo

答えて

0

私はあなたがExcelやインストールされている他のInteropsをせずにExcelファイルを読み込むNugetまたは訪問(https://www.nuget.org/packages/EPPlus/)を介してインストールすることができますEPPlusオープンソースの無料のライブラリを使用することをお勧めします。

以下は、Epplusを使用して更新されたコードです。私は(あなただけのヘッダーを2行目に開始するように意味しているVAR行= 2に= 1をVaRの行を変更し、無視しない場合)あなたは

using (var con = new SqlConnection(@"Data Source=NT;Initial Catalog=StudentDB;Integrated Security=True")) 
     { 
      con.Open(); 

      var excelFile = new FileInfo(@"TestFile.xlsx"); 
      using (var epPackage = new ExcelPackage(excelFile)) 
      { 
       var worksheet = epPackage.Workbook.Worksheets.First(); 

       for (var row = 1; row <= worksheet.Dimension.End.Row; row++) 
       { 
        var rowValues = worksheet.Cells[row, 1, row, worksheet.Dimension.End.Column]; 
        var cmd = new SqlCommand("INSERT INTO Persons(ContactID, FirstName, SecondName, Age) VALUES (@contactid, @firstname, @secondname, @age)", con); 
        cmd.Parameters.AddWithValue("@contactid", rowValues["A1"].Value); 
        cmd.Parameters.AddWithValue("@firstname", rowValues["B1"].Value); 
        cmd.Parameters.AddWithValue("@secondname", rowValues["C1"].Value); 
        cmd.Parameters.AddWithValue("@age", rowValues["D1"].Value); 

        cmd.ExecuteNonQuery(); 
       } 

      } 

     } 
Excelファイルにヘッダ行を持っていないと仮定しています

AddWithValueの一部のパラメータが、insert文で宣言したパラメータと一致しませんでした。コードを使用して、あなたのレイアウトに合うように作成したテストxlsxファイルを読んで、データベースに挿入することができました。それが役に立てば幸い。

+0

助けてくれてありがとう、私はあなたが提供したコードを使ってみました。 >< – ohhhkeo

+0

デバッグ時にどのようなエラーが表示されていますか?データベースにレコードが表示されていますか? – Darthchai

+0

エラーはありません。アプリケーションが実行される可能性がありますが、空のページに移動します。 データベースにレコードが追加されていません。 – ohhhkeo

関連する問題