首页 新闻 会员 周边 捐助

c# 请问DataTable能提交修改吗,用什么语句?

0
悬赏园豆:5 [已解决问题] 解决于 2023-07-11 16:39

语句如下:
string sql="select id,name,status from A";
DataTable dtc=getdatatablesql(sql);
dtc.rows[0]["id"]=1
dtc.rows[0]["name"]="王明"
dtc.rows[0]["status"]="毕业"

dtc.AcceptChanges(); //用AcceptChanges提交后,以上数据还是没保存?要用什么语句?

tea2007的主页 tea2007 | 初学一级 | 园豆:37
提问于:2023-07-11 14:40
< >
分享
最佳答案
0

dtc.AcceptChanges() 方法是用于接受对 DataTable 对象所做的所有更改,并将其状态更改为 Unchanged(未更改)。它的作用是将 DataTable 中的所有行(不是数据库的行)的状态设置为 Unchanged,表示这些行的数据已经被确认并接受。

当你对 DataTable 进行修改(比如增加、删除或修改行)时,这些修改会反映在 DataTable 的状态中。每一行都有一个状态属性,可以是 Added、Modified、Deleted 或 Unchanged。当你调用 dtc.AcceptChanges() 方法时,它会将所有行的状态设置为 Unchanged,表示这些行的数据已经被.net内存确认并接受。

dtc.AcceptChanges() 方法通常在以下情况下使用:

  1. 在对 DataTable 进行一系列修改后,你希望将这些修改保存到数据库之前,可以调用 dtc.AcceptChanges() 方法来确认和接受这些修改。

  2. 在对 DataTable 进行一系列修改后,你可能需要检查这些修改是否已经被保存到数据库。你可以在调用 dtc.AcceptChanges() 方法后,使用 dtc.GetChanges() 方法来获取已经被修改的行,如果返回的结果为 null,表示没有未保存的修改。

需要注意的是,dtc.AcceptChanges() 方法只是将 DataTable 中内存的行的状态更改为 Unchanged,它并不会将修改的数据提交到数据库。要将 DataTable 的修改提交到数据库,你需要使用适当的数据访问技术,如DataAdapter或Entity Framework,并使用相应的方法将数据更新到数据库。

收获园豆:4
lanedm | 老鸟四级 |园豆:2396 | 2023-07-11 15:21

sqlconnection conn=new sqlconnection(properties.settings.default.dyeingcontroldb);
conn.open();
string sql="select id,name,status from A";
sqlcommand cmd=new sqlcommand(sql,conn);
sqldataadapter sdata=new sqldataadapter(cmd);
datatable dtc=new datatable();
sda.fill(dtc);

dtc.rows[0]["id"]=1
dtc.rows[0]["name"]="王明"
dtc.rows[0]["status"]="毕业"
sda.update(dtc);
这样?

tea2007 | 园豆:37 (初学一级) | 2023-07-11 15:44

@tea2007: 当使用 DataAdapter 更新 DataTable 数据时,通常需要以下几个步骤:

  1. 创建连接对象和 DataAdapter 对象。
  2. 创建并填充 DataTable。
  3. 修改 DataTable 的数据。
  4. 使用 DataAdapter 的 Update 方法将修改提交到数据库。

下面是一个示例代码,演示如何使用 DataAdapter 更新 DataTable 数据:

string connectionString = "YourConnectionString";
string sql = "SELECT id, name, status FROM A";

// 创建连接对象和 DataAdapter 对象
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);

    // 创建并填充 DataTable
    DataTable dataTable = new DataTable();
    adapter.Fill(dataTable);

    // 修改 DataTable 的数据
    foreach (DataRow row in dataTable.Rows)
    {
        row["status"] = "Updated";
    }

    // 使用 DataAdapter 的 Update 方法将修改提交到数据库
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
    adapter.Update(dataTable);
}

在这个示例中,我们首先创建了一个 SqlConnection 对象和一个 SqlDataAdapter 对象,并使用 SqlDataAdapter 的 Fill 方法将数据库中的数据填充到 DataTable 中。然后,我们使用 foreach 循环遍历 DataTable 的每一行,并修改了 status 列的值。最后,我们使用 SqlDataAdapter 的 Update 方法将修改提交到数据库。这里还使用了 SqlCommandBuilder 来自动生成适用于 DataTable 的插入、更新和删除命令。

lanedm | 园豆:2396 (老鸟四级) | 2023-07-11 15:47

@lanedm: 谢谢,这样太繁琐了,没什么优点,还不如直接用sql语句中的 update A set name='王明'

tea2007 | 园豆:37 (初学一级) | 2023-07-11 15:54

@tea2007: DataAdapter 更新 DataTable 的数据和直接使用 SQL 语句更新数据库有以下几点区别:

  1. 灵活性:使用 DataAdapter 更新 DataTable 的数据可以更灵活地控制修改的过程。你可以在代码中对 DataTable 进行更复杂的修改操作,例如添加、删除、修改多个行的数据。而直接使用 SQL 语句更新数据库则需要编写更复杂的 SQL 语句来实现相同的功能。

  2. 缓存和批量操作:DataAdapter 更新 DataTable 的数据时,可以利用 DataTable 的缓存机制,将多个修改操作一次性提交到数据库,减少了与数据库的交互次数,提高了性能。而直接使用 SQL 语句更新数据库则需要每次都与数据库进行交互,性能可能会受到影响。

  3. 数据校验和冲突解决:DataAdapter 更新 DataTable 的数据时,可以通过 DataTable 的约束和验证机制来确保数据的完整性。DataAdapter 还提供了解决数据冲突的机制,可以处理多个用户同时修改同一行数据的情况。而直接使用 SQL 语句更新数据库则需要自己编写代码来处理这些问题。

  4. 代码复用和维护:使用 DataAdapter 更新 DataTable 的数据可以将数据操作的逻辑封装在代码中,可以重复使用和维护。而直接使用 SQL 语句更新数据库则需要在每次需要更新数据的地方都编写相应的 SQL 语句,代码冗余度较高。

总的来说,使用 DataAdapter 更新 DataTable 的数据更适合在应用程序中进行数据操作,可以通过数据绑定、数据校验和冲突解决等机制来简化开发和提高性能。而直接使用 SQL 语句更新数据库则适合在简单的数据操作场景中使用,可以快速地执行数据库更新操作。选择使用哪种方式取决于具体的需求和场景。

lanedm | 园豆:2396 (老鸟四级) | 2023-07-11 15:57
其他回答(1)
0
收获园豆:1
dudu | 园豆:31048 (高人七级) | 2023-07-11 14:46

看了,找不到什么有用信息 dtc.commits/ dtc.update 没有这些

支持(0) 反对(0) tea2007 | 园豆:37 (初学一级) | 2023-07-11 14:56
支持(0) 反对(0) dudu | 园豆:31048 (高人七级) | 2023-07-11 15:06

@dudu: 看不太懂,要用SQLDataAdapter.update(dtc)?.万望指教

支持(0) 反对(0) tea2007 | 园豆:37 (初学一级) | 2023-07-11 15:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册