2017-03-31 83 views
0

這是我第一次在這裏發佈一個問題。如何通過asp.net和vb.net將Excel表單(.xlxs)導入到sql server 2012 db

我在網上有很多關於如何通過asp.net和vb.net將excel表單(.xlxs)上傳到sql server 2012數據庫的研究,但不幸的是,所有這些研究都沒有用。

有人可以幫助我的源代碼。

謝謝。

+0

請問您的問題歸結爲:「我要上傳文件到數據庫,通過網站」 ? – Neil

+0

這可能有幫助。 http://stackoverflow.com/questions/43064948/importing-excel-file-to-sql-with-c-sharp-entity-framework/43065951?noredirect=1#comment73226327_43065951你需要從c#翻譯爲vb,但這並不難。 – BeanFrog

+0

我supsect你搜索了一個確切的答案,使用錯誤的關鍵字。有幾十個類似的樣本。搜索*讀取* Excel文件和將*數據寫入數據庫的代碼的代碼搜索起來要容易得多。有數千個樣本。在這兩種情況下,您都應該使用ADO.NET。您可以使用OLEDB提供程序讀取Excel文件。您可以使用SqlBulkCopy批量將數據寫入SQL Server –

回答

0

SqlBulkCopy類顧名思義是從一個源向另一個源進行批量插入,因此可以使用SqlBulkCopy類輕鬆讀取和插入Excel表中的所有行。

<add name = "constr" connectionString = "Data 
Source=.\SQL2008R2;Database=dbname;User Id=abc;password=xxxxx"/> 

我在Web.Config文件中爲2003和2007或更高版本的Excel文件指定了連接字符串。

<add name = "Excel03ConString" connectionString = 
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 
8.0;HDR=YES'"/> 
<add name = "Excel07+ConString" connectionString = 
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended 
    Properties='Excel 8.0;HDR=YES'"/> 

HTML標記由ASP.Net FileUpload控件和一個Button來觸發文件上傳過程。

<asp:FileUpload ID="FileUpload1" runat="server" /> 
<asp:Button Text="Upload" OnClick = "Upload" runat="server" /> 

您將需要導入以下命名空間。

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

protected void Upload(object sender, EventArgs e) 
{ 
//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(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(); 
     } 
    } 
} 
} 

來源是 https://www.aspsnippets.com/Articles/Using-SqlBulkCopy-to-import-Excel-SpreadSheet-data-into-SQL-Server-in-ASPNet-using-C-and-VBNet.aspx 進一步的幫助,請訪問該 希望這將有助於您

相關問題