如何导入Excel文件到数据库ADO.net

问题描述:

我试图编写代码来使用C#和ADO.net将Excel文件导入到数据库中我终于得到了运行代码但输出错误。如何导入Excel文件到数据库ADO.net

using Excel; 
using System.IO; 

namespace ExpPerson 
{ 
    public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void btnImport_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       OpenFileDialog op = new OpenFileDialog(); 
       op.Filter = "Excel Workbook| *.xls;*.xlsx;*.xlsm"; 
       if (op.ShowDialog() == DialogResult.Cancel) 
        return; 
       FileStream stream = new FileStream(op.FileName, FileMode.Open); 
       IExcelDataReader excelreader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
       DataSet result = excelreader.AsDataSet(); 

       MaamoonKhalidIssueEntities db = new MaamoonKhalidIssueEntities(); 
        foreach (DataTable table in result.Tables) 
        { 
         foreach (DataRow dr in table.Rows) 
         { 
          Person addtable = new Person() 
          { 
           nname = Convert.ToString(dr[0]), 
           ncode = Convert.ToString(dr[1]), 
           nTel1 = Convert.ToString(dr[2]), 
           nTel2 = Convert.ToString(dr[3]), 
           nFax = Convert.ToString(dr[4]), 
           nEmail = Convert.ToString(dr[5]), 
           nAdd = Convert.ToString(dr[6]) 
          }; 
         } 



       } 
       db.SaveChanges(); 
       excelreader.Close(); 
       stream.Close(); 

       MessageBox.Show("Import Sucess","Good",MessageBoxButtons.OK,MessageBoxIcon.Hand); 
      } 


      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
    } 
} 

但有一个问题,即代码运行没有任何错误,但在数据库中的数据是不正确的,我无法弄清楚什么是错的。

+0

我加了这个colum'db.People.Add(addtable);'并且删除了这个'db.SaveChanges();'什么也没有发生 –

+0

谢谢你跟我一起工作 –

您需要在DataRow循环的每次迭代中调用db.People.Add(addtable);

所以:

foreach (DataRow dr in table.Rows) 
{ 
    Person addtable = new Person() 
    { 
     nname = Convert.ToString(dr[0]), 
     ncode = Convert.ToString(dr[1]), 
     nTel1 = Convert.ToString(dr[2]), 
     nTel2 = Convert.ToString(dr[3]), 
     nFax = Convert.ToString(dr[4]), 
     nEmail = Convert.ToString(dr[5]), 
     nAdd = Convert.ToString(dr[6]) 
    }; 
    db.People.Add(addtable) 
} 

否则,实体框架不知道你希望他们插入到数据库中。