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

一、前端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
%>
日志记录
为了追踪批量导入操作的进展和问题,建议将操作日志记录到文件或数据库中,以下是一个记录日志到文件的示例代码:

<%
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,可以考虑使用表变量或临时表来暂存数据,然后一次性插入到目标表中。

Q2: 如何处理批量插入过程中的部分失败?
A2: 在批量插入过程中,如果遇到部分数据失败,可以采取以下措施:
使用事务的保存点(Savepoint),在出错时回滚到上一个保存点,而不是回滚整个事务。
记录失败的数据和错误信息,以便后续分析和处理。
如果业务允许,可以选择忽略部分失败的数据,继续处理剩余的成功数据。
以上就是关于“asp.net 批量新增数据库”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!