我正在创建一个网络应用程序,我需要上传客户列表 进入数据库后,列表将来自 CSV、TSV 或 EXCEL 文件。
这些文件可能包含 50-200 条记录
我需要一种方法来为数据库中的每一行插入提供响应给客户端。 例如成功或失败。
我不想执行所有插入,然后返回结果摘要。
我只需要知道如何做到这一点。如果您不能提供代码也没关系。但如果可以的话当然更好。
请随意标记、编辑或重新标记..
谢谢。最好的问候!!!
最佳答案
我将尝试一个基于使用 session 、javascript 计时器和 AJAX 调用的答案。
客户端和服务器之间最常见的通信方式是客户端向服务器请求某些信息。这是在 JavaScript 中通过计时器实现的,当时间过去时,进行 AJAX 调用并创建一个新的计时器来执行相同的操作。
在服务器上,您可以启用 AJAX Methods这些将是 AJAX 调用的入口点。该方法将响应您的插入的状态。
由于您在两个位置处理插入,一个在执行插入的页面中,另一个在 AJAX 方法中(该方法是静态的,您无法访问 Page 实例),因此您需要将逻辑移至单独的位置类并跟踪 session 中的插入。
所以代码将如下所示:
public class CsvInserts
{
private IList<string> InsertsProgress {
get {
if (HttpContext.Current.Session["CsvInserts.Inserts"] == null )
HttpContext.Current.Session["CsvInserts.Inserts"] = new List<string>();
return (IList<string>)HttpContext.Current.Session["CsvInserts.Inserts"];
}
}
public IList<string> GetInsertsProgress() {
return InsertsProgress;
}
public void InsertFile(string[] lines) {
foreach ( var line in lines)
{
var row = DataAccess.CsvInserts.Insert(line); // code to insert the line
InsertsProgress.Add(row.GetRelevantInfoForUser()); // successfully inserted or not and which line was inserted
}
}
}
在插入页面上你将做这样的事情
protected void btInsert_OnClick(object sender, EventArgs e)
{
var lines = .. get lines from the posted file;
var insertManager = new CsvInserts();
insertManager.InsertFile(lines);
}
WebMethod 将是这样的
[WebMethod]
public static IList<string> GetInsertsProgress()
{
var insertManager = new CsvInserts();
return insertManager.GetInsertsProgress();
}
在带有该计时器的客户端,您将一次又一次地调用此方法,直到插入完成。用 jQuery 或其他东西显示收到的字符串。
这段 C# 代码来自内存,更像是一个指南。抱歉没有提供 JavaScipt 代码。此外,您还必须在插入完成或创建新的批量插入时清除字符串列表。
关于c# - ASP.NET - MySQL 批量插入每行异步响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342652/