【问题标题】:Update Table based on updated information根据更新信息更新表
【发布时间】:2021-10-19 05:29:37
【问题描述】:

C# 我目前正在从事一个依赖于下载大约 100 个条目的表格的项目。 我首先下载表格并将其存储在本地变量中,然后将变量链接到 DataGridView,用户可以在其中编辑值。 完成后,用户推送保存,它必须使用更改的信息更新 SQL DB 中的表。

我在这里寻求最佳实践,是否建议删除您已更改的行并批量上传更改或基于甚至多个参数的更新?

我知道在专门使用 SQL 时,您可以使用 UPDATE FROM 之类的命令并使用表作为源,但我不知道使用 C# 会如何工作。

提前感谢您的帮助。

public DataTable GetSingleTable(string sTableName, string sGetConnString)  
{  
    DataTable dtTabletoReturn = new DataTable();  
    string sCommand = "SELECT * FROM " + sTableName+ " WHERE 
    BranchID = '"+ sBranchID +"'";  
    SqlConnection sqlConnection = new SqlConnection(sGetConnString);  
    sqlConnection.Open();  
    SqlDataAdapter sqlOilAdapter = new SqlDataAdapter(sCommand, sqlConnection);          
    sqlOilAdapter.Fill(dtTabletoReturn);  
    sqlConnection.Close();  
    return dtTabletoReturn;  
}

【问题讨论】:

  • 请出示用于“下载”表格的代码。如果您使用 SqlDataAdapter,您将拥有将表上的更改更新回服务器所需的所有内容
  • 如果是我,我会写一个 MERGE 存储过程并传入你的 datagridview,前提是你的数据有一个主键
  • 您需要保存对 sqlDataAdapter 的引用,并在需要保存更改时调用 SqlDataAdapter.Update 方法。为此,您应该确保您的数据表定义了一个主键,并且您需要调用 SqlCommandBuilder 将所需的命令添加到 SqlDataAdapter。见docs.microsoft.com/en-us/dotnet/framework/data/adonet/…这里还有第二个答案的例子*.com/questions/8171647/…
  • 使用 EntityFramework 与 db 通信,轻松进行 CRUD。 entityframeworktutorial.net/efcore/entity-framework-core.aspx
  • 旁注:不要在查询中注入东西,使用适当的参数化。诚然,动态表名很难做到这一点,但我们不知道你为什么要这样。

标签: c# sql updating


【解决方案1】:

Entity Framework MVC 将是您的最佳实践。您可以从这里开始: https://www.entityframeworktutorial.net/what-is-entityframework.aspx

【讨论】:

    【解决方案2】:

    正如其他人所提到的,如果这在您的项目中不是不可能的,请尝试 EF 核心或 Dapper - 两者都应该简化您的斗争(在某些特殊情况下不添加其他一些)。

    如果使用 EF 核心,请查看连接/断开连接的场景。 在任何情况下,当使用 EF 获取数据时,为了简单起见,连接场景,EF 核心上下文会跟踪实体(您的数据)。

    它将检测对这些实体所做的更改,因此最后,只需在 EF 核心 DbContext 上调用 SaveChanges() 方法即可保存并仅传输修改后的数据。

    请注意这个非常基本的解释,如果您选择这样做,您将不得不自己阅读。

    【讨论】:

      【解决方案3】:

      所以在摆弄之后,我认为最好的过程是使用 DataAdapter Update 命令,我在这里寻找最佳实践。不幸的是,据我所知,实体框架在从头开始构建应用程序时效果最好。 https://www.youtube.com/watch?v=Y-aGjF6_Ptc&t=166s

      【讨论】: