使用 C# 使用 SQL Table 验证上传的 excel 数据
Validate Uploaded excel data with SQL Table using C#
我有一个场景,其中上传的 excel 必须跨数据库验证
excel 之外的无效数据必须显示在网格中以供用户确认。
在用户确认后,excel 中唯一的有效数据必须在数据库中更新。
我完全可以实现上传、验证和显示在网格中。
场景:
Table 包含姓名、职位和公司等用户数据。
上传的 excel 中提供的名称字段必须在数据库中进行交叉验证。
如果任何名称不可用,则必须在网格中向用户显示数据。
按下 'Continue' 按钮时,必须忽略无效数据,只需要使用有效数据来更新 table。
我不想为此阅读上传的 excel 两遍。
excel 中可能有大量数据可供上传。所以这个操作必须尽可能快。
有没有更好的解决办法
您是说您希望程序阻止用户输入,这样您就不会执行两次代价高昂的操作?
一旦用户单击该按钮,第一段代码就是禁用该按钮和所有其他按钮。另外,最好添加一个加载图标或状态消息来明确这一点。然后,当操作完成后,重新启用相应的按钮。
听起来您正在尝试确定如何通过几次往返来持久保存数据。首先用户上传它。然后您可能必须将其呈现给用户,并且通过继续,他们实际上必须重新提交它,并且在第二次提交时,有效行存储在 table 中。
我同意您不希望用户重新提交电子表格。但是所有这些数据都需要保存在某个地方,以便在用户看到无效行后可以对其进行处理。
我会考虑在数据从 Excel 上传后立即将其存储在 SQL table 中。现在您可以对 table 中的数据执行验证并将行标记为有效或无效。如果您只是验证某些数据是否存在于其他查找 table 中,那么该验证可以通过存储过程批量完成。
现在您已经有了一组行,所有行都带有一些公共键,这些键将它们标识为属于特定的用户操作。现在您可以 return 无效行供用户确认它们将被忽略。当用户确认时,您将有效行迁移到 "real" table 并删除所有行。您还可以在一段时间后使这些行过期。如果用户在给定时间后仍未批准它们,则他们将需要重新上传。
这种方法的一个好处是您可以将此过程分解为不同的、更小的步骤,这有助于管理复杂性。一步执行初始上传。另一个 returns 一组无效行。另一个批准一组有效行。更小的步骤使维护和单元测试更容易。
另一个好处是您可以将该过程与 Excel 上传分离。也许在未来的某个时候,您会想要在 XML 中处理上传。只有第一步需要改变。一旦您的数据进入 table,它来自哪里就不再重要了。
我有一个场景,其中上传的 excel 必须跨数据库验证 excel 之外的无效数据必须显示在网格中以供用户确认。 在用户确认后,excel 中唯一的有效数据必须在数据库中更新。 我完全可以实现上传、验证和显示在网格中。
场景:
Table 包含姓名、职位和公司等用户数据。
上传的 excel 中提供的名称字段必须在数据库中进行交叉验证。 如果任何名称不可用,则必须在网格中向用户显示数据。
按下 'Continue' 按钮时,必须忽略无效数据,只需要使用有效数据来更新 table。
我不想为此阅读上传的 excel 两遍。
excel 中可能有大量数据可供上传。所以这个操作必须尽可能快。 有没有更好的解决办法
您是说您希望程序阻止用户输入,这样您就不会执行两次代价高昂的操作?
一旦用户单击该按钮,第一段代码就是禁用该按钮和所有其他按钮。另外,最好添加一个加载图标或状态消息来明确这一点。然后,当操作完成后,重新启用相应的按钮。
听起来您正在尝试确定如何通过几次往返来持久保存数据。首先用户上传它。然后您可能必须将其呈现给用户,并且通过继续,他们实际上必须重新提交它,并且在第二次提交时,有效行存储在 table 中。
我同意您不希望用户重新提交电子表格。但是所有这些数据都需要保存在某个地方,以便在用户看到无效行后可以对其进行处理。
我会考虑在数据从 Excel 上传后立即将其存储在 SQL table 中。现在您可以对 table 中的数据执行验证并将行标记为有效或无效。如果您只是验证某些数据是否存在于其他查找 table 中,那么该验证可以通过存储过程批量完成。
现在您已经有了一组行,所有行都带有一些公共键,这些键将它们标识为属于特定的用户操作。现在您可以 return 无效行供用户确认它们将被忽略。当用户确认时,您将有效行迁移到 "real" table 并删除所有行。您还可以在一段时间后使这些行过期。如果用户在给定时间后仍未批准它们,则他们将需要重新上传。
这种方法的一个好处是您可以将此过程分解为不同的、更小的步骤,这有助于管理复杂性。一步执行初始上传。另一个 returns 一组无效行。另一个批准一组有效行。更小的步骤使维护和单元测试更容易。
另一个好处是您可以将该过程与 Excel 上传分离。也许在未来的某个时候,您会想要在 XML 中处理上传。只有第一步需要改变。一旦您的数据进入 table,它来自哪里就不再重要了。