当前位置:首页 > 行业动态 > 正文

ASP.NET实现Excel数据高效导入数据库的方法与步骤。

步骤1. 安装所需库: EPPlusDapper。,2. 使用 EPPlus 读取 Excel 文件,提取数据。,3. 使用 Dapper 将数据插入到数据库中。“`csharp,using (var package = new ExcelPackage(new FileInfo(“path_to_excel.xlsx”))),{, var worksheet = package.Workbook.Worksheets[0];, var rowCount = worksheet.Dimension.Rows;, for (int row = 2; row

在ASP.NET中,将EXCEL数据导入到数据库是一个常见的需求,特别是在处理大量数据或需要从外部文件批量导入数据时,以下是实现这一功能的详细步骤和方法:

ASP.NET实现Excel数据高效导入数据库的方法与步骤。  第1张

方法一:使用OleDbConnection和DataTable

创建ASP.NET页面和控件

创建一个ASP.NET页面,并在页面上添加一个FileUpload控件用于选择Excel文件,以及一个Button控件用于触发上传操作。

<div style="margin-top: 0px; margin-left: 0px;">
    <asp:Label ID="Label1" runat="server" Text="文件:" Width="60px"></asp:Label>
    <asp:FileUpload ID="fulImport" runat="server" Height="20px" Width="450px" />
    <asp:Button ID="btnImport" runat="server" Text="一键上传" Width="80px" Height="20px" OnClick="btnImport_Click" />
</div>

后台代码处理

在后台代码中,首先需要将Excel文件上传到服务器,然后将Excel数据读取到DataTable中,最后将DataTable中的数据插入到数据库中。

ASP.NET实现Excel数据高效导入数据库的方法与步骤。  第2张

a. 上传Excel文件到服务器

protected string GetExcel()
{
    string fileUrl = "";
    try
    {
        string excelFile = this.fulImport.PostedFile.FileName;
        string fileName = Path.GetFileNameWithoutExtension(fulImport.PostedFile.FileName);
        string extentionName = excelFile.Substring(excelFile.LastIndexOf(".") + 1);
        if (fileName == "" || fileName == null)
        {
            Response.Write("<script>alert('请先选择Excel文件!')</script>");
            return null;
        }
        if (extentionName != "xls" && extentionName != "xlsx")
        {
            Response.Write("<script>alert('您上传的不是Excel文件!')</script>");
            return null;
        }
        string dateTime = DateTime.Now.Date.ToString("yyyyMMdd");
        string time = DateTime.Now.ToShortTimeString().Replace(":", "");
        string newFileName = dateTime + time + DateTime.Now.Millisecond.ToString() + ".xls"; ;
        fileUrl = Server.MapPath("..\excel") + "\" + newFileName;
        this.fulImport.PostedFile.SaveAs(fileUrl);
        return fileUrl;
    }
    catch
    {
        Response.Write("<script>alert('数据上传失败,请重新导入')</script>");
        return null;
    }
}

b. 读取Excel数据到DataTable

protected System.Data.DataTable GetExcelDatatable(string fileUrl)
{
    const string cmdText = "Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
    System.Data.DataTable dt = null;
    OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl));
    if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
    {
        conn.Open();
    }
    System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    string sheetName = schemaTable.Rows[0]["TABLE_NAME"].ToString();
    string query = "SELECT  FROM [" + sheetName + "]";
    OleDbDataAdapter myCommand = new OleDbDataAdapter(query, conn);
    dt = new System.Data.DataTable();
    myCommand.Fill(dt);
    conn.Close();
    return dt;
}

c. 将DataTable数据插入到数据库

ASP.NET实现Excel数据高效导入数据库的方法与步骤。  第3张
protected void InsetData(System.Data.DataTable dt)
{
    // 假设已经有一个数据库连接字符串和插入方法
    string connectionString = "your_connection_string";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            // 根据dt中的列名和数据库表结构构建SQL语句或使用参数化查询插入数据
            // 这里以简单示例说明,实际应根据具体表结构调整
            string sql = "INSERT INTO your_table (column1, column2, column3) VALUES (@value1, @value2, @value3)";
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                cmd.Parameters.AddWithValue("@value1", dt.Rows[i]["Column1"].ToString());
                cmd.Parameters.AddWithValue("@value2", dt.Rows[i]["Column2"].ToString());
                cmd.Parameters.AddWithValue("@value3", dt.Rows[i]["Column3"].ToString());
                cmd.ExecuteNonQuery();
            }
        }
    }
}

d. 按钮点击事件处理

protected void btnImport_Click(object sender, EventArgs e)
{
    string fileUrl = this.GetExcel();
    if (fileUrl != null)
    {
        this.InsetData(this.GetExcelDatatable(fileUrl));
        Response.Write("<script>alert('数据导入成功!')</script>");
    }
}

方法二:使用NPOI库

NPOI是一个开源的.NET库,用于操作Excel文件(包括xls和xlsx格式),使用NPOI库可以更灵活地处理Excel数据,而无需依赖OleDbConnection。

安装NPOI库

通过NuGet包管理器安装NPOI库。

Install-Package NPOI

2. 读取Excel文件并导入数据到数据库

使用NPOI库读取Excel文件,并将数据逐行读取后插入到数据库中,以下是一个简化的示例:

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
protected void ImportExcelToDatabase(string filePath)
{
    IWorkbook workbook;
    using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        workbook = new XSSFWorkbook(file); // 对于xlsx文件
        // workbook = new HSSFWorkbook(file); // 对于xls文件
        ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表
        for (int rowIndex = 1; rowIndex <= sheet.LastRowNum; rowIndex++)
        {
            IRow row = sheet.GetRow(rowIndex);
            if (row != null)
            {
                string column1 = row.GetCell(0).StringCellValue;
                string column2 = row.GetCell(1).StringCellValue;
                // 根据实际列数和数据类型获取单元格值
                // 构建SQL语句或使用参数化查询插入数据到数据库
                string connectionString = "your_connection_string";
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    string sql = "INSERT INTO your_table (column1, column2) VALUES (@column1, @column2)";
                    using (SqlCommand cmd = new SqlCommand(sql, conn))
                    {
                        cmd.Parameters.AddWithValue("@column1", column1);
                        cmd.Parameters.AddWithValue("@column2", column2);
                        cmd.ExecuteNonQuery();
                    }
                }
            }
        }
    }
}

两种方法都可以实现将Excel数据导入到ASP.NET应用程序的数据库中,方法一使用了OleDbConnection和DataTable,适用于简单的Excel导入需求;方法二使用了NPOI库,提供了更多的灵活性和功能,适用于复杂的Excel处理场景,根据具体需求选择合适的方法,并确保在生产环境中处理好异常和安全性问题,以下是两个关于ASP.NET中EXCEL数据导入到数据库的方法的FAQs:

FAQ 1: 如何在ASP.NET中将Excel数据导入到数据库?

回答: 在ASP.NET中将Excel数据导入到数据库可以通过多种方式实现,其中两种常见的方法是使用OleDbConnection配合DataTable,或者使用第三方库如NPOI,使用OleDbConnection时,首先需要将Excel文件上传到服务器,然后通过OleDbConnection连接到Excel文件,并将数据读取到DataTable中,最后将DataTable中的数据插入到数据库,使用NPOI库时,可以直接在服务器端读取Excel文件,并通过NPOI提供的对象模型遍历Excel数据,然后将其插入到数据库中,具体选择哪种方法取决于项目需求和复杂度。

FAQ 2: 使用NPOI库将Excel数据导入到数据库有哪些优势?

回答: 使用NPOI库将Excel数据导入到数据库具有多项优势,NPOI库是专门用于操作Office文档的开源库,支持Excel、Word等多种格式,因此在处理Excel文件时具有天然的优势,NPOI库提供了丰富的API和对象模型,可以方便地读取、写入和修改Excel文件的内容,包括单元格样式、数据格式等,使用NPOI库还可以避免在服务器上安装Office软件的需求,降低了环境配置的复杂性和成本,NPOI库具有良好的跨平台性,可以在不同操作系统上运行,提高了项目的可移植性。

0