使用 C# 和 ASP.NET 将数据从 Excel 文件导出到 SQL Server 表的最佳方法? [复制]
Posted
技术标签:
【中文标题】使用 C# 和 ASP.NET 将数据从 Excel 文件导出到 SQL Server 表的最佳方法? [复制]【英文标题】:Best approach to export data from Excel file to SQL Server table using C# and ASP.NET? [duplicate] 【发布时间】:2020-04-29 17:54:23 【问题描述】:我制作了一个小网络应用程序,让用户能够将 .xlsx
文件上传到服务器的数据库表,但我遇到了 OLEDB 连接字符串:
System.InvalidOperationException: 'El proofedor 'Microsoft.ACE.OLEDB.12.0' no está registrado en elequipo local。'
由于应用程序将被上传到公司的服务器,因此安装 x32 驱动程序是不可行的,并且将项目更改为以 x32 版本运行也无济于事。我正在寻找一种更好的方法来实现这一点,并将 .xlsx 文件保留为用户输入。
protected void btnImportar_Click(object sender, EventArgs e)
//SUBE Y GUARDA ARCHIVO
string rutaArchivo = Server.MapPath(subeArchivo.FileName);
string excelPath = Server.MapPath("~/cargas/") + Path.GetFileName(subeArchivo.PostedFile.FileName)/* + "_" + DateTime.Now.ToString("yyyyMMdd")*/;
lblRutaArchivo.Text = rutaArchivo;
subeArchivo.SaveAs(excelPath);
string conStringExcel = string.Empty;
string extension = Path.GetExtension(subeArchivo.PostedFile.FileName);
switch (extension)
case ".xls": //Excel 97-03
conStringExcel = ConfigurationManager.ConnectionStrings["Excel03conStringExcel"].ConnectionString;
break;
case ".xlsx": //Excel 07 or higher
conStringExcel = ConfigurationManager.ConnectionStrings["Excel07+conStringExcel"].ConnectionString;
break;
conStringExcel = string.Format(conStringExcel, excelPath);
using (OleDbConnection connExcel = new OleDbConnection(conStringExcel))
connExcel.Open(); // ERROR SHOWS UP HERE
string hojaExcel = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["CAR_DCT"].ToString();
DataTable dtExcelData = new DataTable();
//TODAS LAS COLUMNAS COMO STRING
dtExcelData.Columns.AddRange(new DataColumn[7]
new DataColumn("ID_USU_CAR", typeof(string)),
new DataColumn("RUT_DCT", typeof(string)),
new DataColumn("TIP_CON", typeof(string)),
new DataColumn("ID_CON", typeof(string)),
new DataColumn("INI_BEN", typeof(string)),
new DataColumn("FIN_BEN", typeof(string)),
new DataColumn("MON_CLP", typeof(string))
);
using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + hojaExcel + "]", connExcel))
oda.Fill(dtExcelData);
connExcel.Close();
using (connSQL)
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connSQL))
//Set the database table name
sqlBulkCopy.DestinationTableName = "dbo.TH_AD.CAR_DCT_BEN_TMP";
//MAPEO COLUMNAS
//ID_USU_CARGA RUT_DV TIP_CON ID_CON INI_BEN FIN_BEN MON_CLP
sqlBulkCopy.ColumnMappings.Add("ID_USU_CAR", "ID_USU_CAR");
sqlBulkCopy.ColumnMappings.Add("RUT_DCT", "RUT_DCT");
sqlBulkCopy.ColumnMappings.Add("TIP_CON", "TIP_CON");
sqlBulkCopy.ColumnMappings.Add("ID_CON", "ID_CON");
sqlBulkCopy.ColumnMappings.Add("INI_BEN", "INI_BEN");
sqlBulkCopy.ColumnMappings.Add("FIN_BEN", "FIN_BEN");
sqlBulkCopy.ColumnMappings.Add("MON_CLP", "MON_CLP");
connSQL.Open();
sqlBulkCopy.WriteToServer(dtExcelData);
connSQL.Close();
【问题讨论】:
如果您使用 SQL 连接,您可以使用 SqlConnection 代替。它比 OleDb 更有效,但限制您使用 SQL。此外,您可能应该考虑使用 hojaExcel 的参数来避免 sql 注入。 【参考方案1】:尝试检查 Spire.XLS,它具有获取 DataTable 的功能,然后您可以加载到您的批量功能。
【讨论】:
以上是关于使用 C# 和 ASP.NET 将数据从 Excel 文件导出到 SQL Server 表的最佳方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 从 ASP.NET 中的 SQL Server 数据库中检索和显示 GridView 中的值
使用asp.net gridview和c#从phpmyadmin数据库显示图像