如何使用asp.net c#在Web窗体应用程序中使用自动递增的Id字段将Excel数据上载到SQL Server表中?

我读了一个来自Mudassar艾哈迈德汗在一个了不起的post在http://www.aspsnippets.com/Articles/Import-Upload-CSV-file-data-to-SQL-Server-database-in-ASPNet-using-C-and -VBNet.aspx 。 它介绍了如何使用asp.net和C#将Excel文件上载到SQL Server数据库表中。

它工作得很好,但我想得到它的Id列自动递增表的工作。 我想知道如何修改代码,以允许用户上传文件,而不必指定Id列的值。

任何帮助将不胜感激。

我正在使用上述教程中提供的代码 – 我没有做任何更改。 我只是想了解如何才能将其应用于我的实际应用程序。

请让我知道,如果我需要提供更多的信息。

任何帮助将不胜感激。

谢谢,J

这里是我想要修改的代码:

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

这是aspx页面标记:

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

以下是Excel 2003和Excel 2007或更高版本的Excel特定连接string:

 <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'"/> 

由于您不能使用标识列进行批量复制,因此您可以将一列添加到数据表中:

  //... using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con)) { oda.Fill(dtExcelData); } excel_con.Close(); dtExcelData.Columns.Add("Id", typeof(int)); int i = 0; foreach(DataRow dr in dtExcelData.Rows) { dr["Id"] = ++i; } //...