dataset 更新到数据库的问题

这篇博客讨论了在使用dataset更新数据库时遇到的问题。代码尝试从数据库获取数据,填充到dataset中,然后进行修改,但即使数据发生变化,`dsE.HasChanges()`始终返回false,导致无法更新数据库。

string everyConn = Common.CommonUtility.GetEveryConn ();
//   EmpResource mpEvery = new EmpResource(everyConn);
//   DataSet dsE= mpEvery.mpResourceList ();
//   DataTable dtE=dsE.Tables[0];
   DataSet dsE = new DataSet();
   System.Data.SqlClient.SqlConnection Econn = new SqlConnection(everyConn);
   
   string strSql = " select * from empResource";
   Econn.Open();
   //SqlCommand everyCmd = new SqlCommand(strSql,Econn);
   //string srcTable ="empResource";
   SqlDataAdapter sqlAdapter = new SqlDataAdapter(strSql,Econn);

   SqlCommandBuilder scb = new SqlCommandBuilder(sqlAdapter);
   //everyCmd.ExecuteNonQuery();
   sqlAdapter.Fill(dsE,"empResource");

   DataTable dtE=dsE.Tables["empResource"];
   dtE.PrimaryKey = new DataColumn[]{dtE.Columns["mpId"]} ;

   
   EmpResource mp = new EmpResource(conStr);
   DataSet ds = mp.mpResourceByMpId (pubMpId);
   DataTable dt = ds.Tables[0];
   int rowCount = dt.Rows.Count;
   if(rowCount>0)
   {
    for (int i=0;i<rowCount;i++)
    {
     if(dtE.Select("mpId="+dt.Rows[i]["mpId"].ToString())!=null)
     {
      dtE.ImportRow (dt.Rows[i]);
      dtE.AcceptChanges ();
      

     }
     
    }
   }
   
   dsE.Merge(ds);
//   foreach(DataRow dr in dsE.Tables[0].Rows)
//   {
//    Response.Write (dr["mpId"].ToString()+"|");
//    Response.Write (dr["mpName"].ToString()+"#");
//   }
   //Response.Write (dsE.HasChanges());
   sqlAdapter.Update(dsE,"empResource");
   
   //dsE.AcceptChanges();
   Econn.Dispose();

 

 

不报错,可是就是更新不了数据库

而且dsE.HasChanges()一直是flase

### 如何使用 C# 创建 Dataset更新数据库 在 C# 中,`DataSet` 是一个内存中的数据容器,可以用于存储和操作从数据库检索到的数据。通过 `DataAdapter` 和其提供的方法(如 `Update`),可以将对 `DataSet` 的更改同步回数据库。以下是详细说明和示例代码[^1]。 #### 1. 使用 `DataAdapter` 填充 `DataSet` `DataAdapter` 提供了将数据从数据库加载到 `DataSet` 的功能。以下是一个示例,展示如何使用 `SqlDataAdapter` 将数据填充到 `DataSet` 中: ```csharp using System; using System.Data; using System.Data.SqlClient; class Program { static void Main() { string connectionString = "your_connection_string"; // 替换为实际的连接字符串 string query = "SELECT * FROM YourTable"; // 替换为实际的查询语句 using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapter = new SqlDataAdapter(query, connection); // 创建 CommandBuilder 自动生成 Insert/Update/Delete 命令 SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter); DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "YourTable"); // 在此处修改 DataSet 内容 DataRow row = dataSet.Tables["YourTable"].Rows[0]; row["ColumnName"] = "New Value"; // 替换为实际列名和新值 // 更新数据库 adapter.Update(dataSet, "YourTable"); } } } ``` #### 2. 关键点解析 - **连接字符串**:需要提供有效的 SQL Server 连接字符串。 - **CommandBuilder**:自动生成 `InsertCommand`、`UpdateCommand` 和 `DeleteCommand`,以便在调用 `DataAdapter.Update` 时能够正确更新数据库[^2]。 - **填充 `DataSet`**:通过 `DataAdapter.Fill` 方法将数据加载到 `DataSet` 中。 - **更新数据库**:通过 `DataAdapter.Update` 方法将对 `DataSet` 的更改同步回数据库。 #### 3. 注意事项 - 确保 `DataSet` 中的表名称与 `DataAdapter.Fill` 方法中指定的名称一致。 - 如果需要手动定义 `InsertCommand`、`UpdateCommand` 和 `DeleteCommand`,可以通过设置 `DataAdapter` 的相应属性来实现。 - 数据库的权限必须允许执行更新操作。 #### 4. 示例代码扩展 如果需要处理更复杂的场景,例如插入新行或删除现有行,可以参考以下代码片段: ```csharp // 插入新行 DataRow newRow = dataSet.Tables["YourTable"].NewRow(); newRow["ColumnName"] = "Value"; dataSet.Tables["YourTable"].Rows.Add(newRow); // 删除行 dataSet.Tables["YourTable"].Rows[0].Delete(); // 更新数据库 adapter.Update(dataSet, "YourTable"); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值