语句如下:
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提交后,以上数据还是没保存?要用什么语句?
dtc.AcceptChanges()
方法是用于接受对 DataTable 对象所做的所有更改,并将其状态更改为 Unchanged(未更改)。它的作用是将 DataTable 中的所有行(不是数据库的行)的状态设置为 Unchanged,表示这些行的数据已经被确认并接受。
当你对 DataTable 进行修改(比如增加、删除或修改行)时,这些修改会反映在 DataTable 的状态中。每一行都有一个状态属性,可以是 Added、Modified、Deleted 或 Unchanged。当你调用 dtc.AcceptChanges()
方法时,它会将所有行的状态设置为 Unchanged,表示这些行的数据已经被.net内存确认并接受。
dtc.AcceptChanges()
方法通常在以下情况下使用:
在对 DataTable 进行一系列修改后,你希望将这些修改保存到数据库之前,可以调用 dtc.AcceptChanges()
方法来确认和接受这些修改。
在对 DataTable 进行一系列修改后,你可能需要检查这些修改是否已经被保存到数据库。你可以在调用 dtc.AcceptChanges()
方法后,使用 dtc.GetChanges()
方法来获取已经被修改的行,如果返回的结果为 null,表示没有未保存的修改。
需要注意的是,dtc.AcceptChanges()
方法只是将 DataTable 中内存的行的状态更改为 Unchanged,它并不会将修改的数据提交到数据库。要将 DataTable 的修改提交到数据库,你需要使用适当的数据访问技术,如DataAdapter或Entity Framework,并使用相应的方法将数据更新到数据库。
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: 当使用 DataAdapter 更新 DataTable 数据时,通常需要以下几个步骤:
下面是一个示例代码,演示如何使用 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: 谢谢,这样太繁琐了,没什么优点,还不如直接用sql语句中的 update A set name='王明'
@tea2007: DataAdapter 更新 DataTable 的数据和直接使用 SQL 语句更新数据库有以下几点区别:
灵活性:使用 DataAdapter 更新 DataTable 的数据可以更灵活地控制修改的过程。你可以在代码中对 DataTable 进行更复杂的修改操作,例如添加、删除、修改多个行的数据。而直接使用 SQL 语句更新数据库则需要编写更复杂的 SQL 语句来实现相同的功能。
缓存和批量操作:DataAdapter 更新 DataTable 的数据时,可以利用 DataTable 的缓存机制,将多个修改操作一次性提交到数据库,减少了与数据库的交互次数,提高了性能。而直接使用 SQL 语句更新数据库则需要每次都与数据库进行交互,性能可能会受到影响。
数据校验和冲突解决:DataAdapter 更新 DataTable 的数据时,可以通过 DataTable 的约束和验证机制来确保数据的完整性。DataAdapter 还提供了解决数据冲突的机制,可以处理多个用户同时修改同一行数据的情况。而直接使用 SQL 语句更新数据库则需要自己编写代码来处理这些问题。
代码复用和维护:使用 DataAdapter 更新 DataTable 的数据可以将数据操作的逻辑封装在代码中,可以重复使用和维护。而直接使用 SQL 语句更新数据库则需要在每次需要更新数据的地方都编写相应的 SQL 语句,代码冗余度较高。
总的来说,使用 DataAdapter 更新 DataTable 的数据更适合在应用程序中进行数据操作,可以通过数据绑定、数据校验和冲突解决等机制来简化开发和提高性能。而直接使用 SQL 语句更新数据库则适合在简单的数据操作场景中使用,可以快速地执行数据库更新操作。选择使用哪种方式取决于具体的需求和场景。
看了,找不到什么有用信息 dtc.commits/ dtc.update 没有这些
@tea2007: 参考 How to Use an Update Statement in SQLDataAdapter
@dudu: 看不太懂,要用SQLDataAdapter.update(dtc)?.万望指教