You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 带外连接的多表查询下如何为SqlDataAdapter编写正确的UpdateCommand

解决方法

SqlCommandBuilder仅支持为单表查询自动生成增删改命令,你使用了多表关联查询,因此必须手动定义UpdateCommand,具体实现如下:

完整实现代码

//加载数据填充到GridView
DataTable WszystkieProduktyDlaDanegoSklepu = new DataTable();
SqlDataAdapter sda555123 = new SqlDataAdapter(@"
Select  DISTINCT p.id,p.Model_Number,p.Product_Name,p.Website_Link,p.Entry_date,p.LastUpdate_date,p.PrzydzialRozmiarow_ID,p.FlagaWaznosci,p.Notatka,pr.NazwaRozmiarowki,wd.LINK_StockX 
from Products p with(nolock)
left outer  join Widok_Model_Sklep_Stockx_Linki wd with(nolock) on wd.Product_ID = p.id 
left outer join PrzydzialRozmiarow pr with(nolock) on pr.id = p.PrzydzialRozmiarow_ID 
inner join Shops s with(nolock) on s.ID = p.Shop_ID 
", conn123);
sda555123.Fill(WszystkieProduktyDlaDanegoSklepu);

//设置DataTable主键,必须保留
WszystkieProduktyDlaDanegoSklepu.PrimaryKey = new DataColumn[] { WszystkieProduktyDlaDanegoSklepu.Columns["id"] };

//手动定义UpdateCommand,仅更新Products表的两个目标字段
SqlCommand updateCmd = new SqlCommand(@"
UPDATE Products 
SET FlagaWaznosci = @FlagaWaznosci, Notatka = @Notatka
WHERE id = @ProductId
", conn123);

//配置参数,与DataTable列做映射
//请根据你实际表结构修改SqlDbType和字段长度
updateCmd.Parameters.Add("@FlagaWaznosci", SqlDbType.Bit).SourceColumn = "FlagaWaznosci";
updateCmd.Parameters.Add("@Notatka", SqlDbType.NVarChar, 2000).SourceColumn = "Notatka";
updateCmd.Parameters.Add("@ProductId", SqlDbType.Int).SourceColumn = "id";

//赋值给DataAdapter的UpdateCommand属性
sda555123.UpdateCommand = updateCmd;

//执行更新
sda555123.Update(WszystkieProduktyDlaDanegoSklepu);

注意事项

  • 请根据你的Products表实际字段类型调整参数的SqlDbType属性,比如id如果是Guid类型则改为SqlDbType.UniqueIdentifier,Notatka字段长度要和表定义一致
  • 不需要再使用SqlCommandBuilder,相关代码可以直接删除
  • 如果需要支持新增、删除操作,可以按照同样的逻辑自定义InsertCommand和DeleteCommand

内容的提问来源于stack exchange,提问作者Adam Zbudniewek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:15:03