如何在ASP.NET中实现批量新增数据库记录?

在ASP.NET中实现批量新增数据库记录是一个常见的需求,尤其在需要处理大量数据时,下面将详细介绍如何在ASP.NET中实现批量新增数据库记录,包括前端JavaScript代码和后端C#代码的编写,以及相关的错误处理和日志记录。

如何在ASP.NET中实现批量新增数据库记录?

一、前端JavaScript代码

在前端,我们可以使用JavaScript和AJAX来实现批量新增操作,以下是一个示例代码:

function 批量新增() {
    // 获取选中行数据
    var checkStatus = layuiTable.checkStatus("表格名称");
    // 判断是否选中数据
    if (checkStatus.data.length > 0) {
        var 自定义名称1 = "";
        for (var i = 0; i < checkStatus.data.length; i++) {
            // 根据ID拼接字符串 (比如这里根据AchievementID来进行字符串的拼接)
            自定义名称1 += checkStatus.data[i].AchievementID + ";";
        }
        // 去掉最后的一个“;”
        自定义名称1 = 自定义名称1.substring(0, 自定义名称1.length 1);
        layer.confirm("提醒用户是否新增选中的数据", {icon: 3, title: "提示"}, function () {
            $.post("传入控制器的方法名称", {自定义名称: 自定义名称1}, function (msg) {
                // 刷新表格
                表格名称.reload();
                layer.alert(msg, {icon: 0, title: "提示"});
            });
        });
    } else {
        layer.alert("提醒用户选择需要新增的数据");
    }
}

二、后端C#代码

在后端,我们需要编写一个控制器方法来处理前端传来的数据,以下是一个示例代码:

public ActionResult 页面传过来的方法名称(页面传过来的参数名称) {
    ReturnJsonVo returnJson = new ReturnJsonVo();
    returnJson.State = false;
    int successCount = 0; // 记录传入的ID的数量
    int oldCount = 0; // 记录传入的ID中已经存在的数量
    try {
        // 判断参数是否为空
        if (!string.IsNullOrEmpty(页面传过来的参数名称)) {
            // 对拼接好的id进行分割
            string[] 自定义名称1 = 页面传过来的参数名称.Split(';');
            // 遍历循环字符串数组
            foreach (string 自定义名称2 in 自定义名称1) {
                // 将string类型的数据转化为int
                int 自定义名称3 = Convert.ToInt32(自定义名称2);
                // 根据“自定义名称3”判断数据库中的某张表是否已经存在该数据
                int 自定义名称4 = (from 自定义表名 in Model对象.查询的表
                                  where 自定义表名.字段名 == 自定义名称3
                                  select 自定义表名).Count();
                if (自定义名称4 == 0) {
                    // 查询需要新增的数据
                    // ...(此处省略具体查询逻辑)...
                    // 实例化数据库中的某张表
                    // ...(此处省略具体实例化逻辑)...
                    successCount++;
                } else {
                    oldCount++;
                }
            }
            returnJson.State = true;
            returnJson.Message = "成功新增" + successCount + "条数据,已存在" + oldCount + "条数据";
        } else {
            returnJson.Message = "未选中任何数据";
        }
    } catch (Exception ex) {
        returnJson.Message = "操作失败:" + ex.Message;
    }
    return Json(returnJson, JsonRequestBehavior.AllowGet);
}

三、错误处理与日志记录

在进行批量导入操作时,可能会遇到各种各样的错误,如数据格式不匹配、数据库连接失败等,为了确保数据导入的可靠性和可追溯性,必须进行错误处理和日志记录。

错误处理

在ASP中,可以使用On Error Resume Next语句来捕获错误,并使用Err对象来获取错误信息,以下是一个示例代码:

<%
On Error Resume Next
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM temp_table", conn, 1, 3
Do Until rs.EOF
    conn.Execute "INSERT INTO target_table (column1, column2) VALUES ('" & rs("column1") & "', '" & rs("column2") & "')"
    If Err.Number < 0 Then
        Response.Write "Error: " & Err.Description & "<br>"
        Err.Clear
    End If
    rs.MoveNext
Loop
rs.Close
Set rs = Nothing
%>

日志记录

为了追踪批量导入操作的进展和问题,建议将操作日志记录到文件或数据库中,以下是一个记录日志到文件的示例代码:

如何在ASP.NET中实现批量新增数据库记录?

<%
Dim fso, logFile
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set logFile = fso.OpenTextFile(Server.MapPath("import_log.txt"), 8, True)
logFile.WriteLine "Import started at " & Now
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM temp_table", conn, 1, 3
Do Until rs.EOF
    conn.Execute "INSERT INTO target_table (column1, column2) VALUES ('" & rs("column1") & "', '" & rs("column2") & "')"
    If Err.Number < 0 Then
        logFile.WriteLine "Error: " & Err.Description & " at " & Now
        Err.Clear
    End If
    rs.MoveNext
Loop
rs.Close
Set rs = Nothing
logFile.WriteLine "Import completed at " & Now
logFile.Close
Set logFile = Nothing
Set fso = Nothing
%>

相关问题与解答

Q1: 如何优化批量插入的性能?

A1: 可以通过以下几种方式优化批量插入的性能:

使用事务(Transaction)来包裹批量插入操作,减少数据库的提交次数。

使用SqlBulkCopy类进行批量插入,这是专门用于高效批量插入的工具。

如果表中存在索引,可以先删除索引,批量插入完成后再重建索引。

确保数据源的格式与目标数据库表的结构一致,减少数据清洗和转换的工作量。

如果使用的是SQL Server,可以考虑使用表变量或临时表来暂存数据,然后一次性插入到目标表中。

如何在ASP.NET中实现批量新增数据库记录?

Q2: 如何处理批量插入过程中的部分失败?

A2: 在批量插入过程中,如果遇到部分数据失败,可以采取以下措施:

使用事务的保存点(Savepoint),在出错时回滚到上一个保存点,而不是回滚整个事务。

记录失败的数据和错误信息,以便后续分析和处理。

如果业务允许,可以选择忽略部分失败的数据,继续处理剩余的成功数据。

以上就是关于“asp.net 批量新增数据库”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!