我想要更新 2 個欄位:p.FlagaWaznosci 和 p.Notatka
我的選擇看起來像:
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
只有外部聯接才能獲得我需要在 gridview 中顯示的正確資料。現在當值 p.FlagaWaznosci 或 p.Notatka 改變時,我想在我的資料庫中保存更新。
我嘗試使用
//loads dataand fill to gridview
DataTable WszystkieProduktyDlaDanegoSklepu;
SqlDataAdapter sda555123 = new SqlDataAdapter("here is my select", conn123);
sda555123.Fill(WszystkieProduktyDlaDanegoSklepu);
//later update table Prooducts and save changed on p.Notatka and p.FlagaWaznosci
cmdbl = new SqlCommandBuilder(sda555123);
cmdbl.ConflictOption = ConflictOption.OverwriteChanges;
sda555123.Update(WszystkieProduktyDlaDanegoSklepu);
但是這樣我有錯誤

于是查了很多,發現:我得自己寫CommandUpdate。
所以......sda555123.UpdateCommand我不知道如何在更新命令中為它撰寫自己的更新。
SQL Server 中的更新應如下所示:
Update Products
set FlagaWaznosci = @Flagawaznosci from my sda555123,
Notatka = @Notatka from my sda555123
where id = @ p.ID from my sda555123
我的命令更新在這里應該是什么樣子?
編輯 1:
我試著補充: WszystkieProduktyDlaDanegoSklepu.PrimaryKey = new DataColumn[] { WszystkieProduktyDlaDanegoSklepu.Columns["id"] }
但沒有。還是這個錯誤。
uj5u.com熱心網友回復:
我會通過改變方法而不是改變 SqlDataAdapter 的更新命令來解決這個問題。
鑒于查詢中的 Products.id 在結果集中是唯一的:
1- 創建一個臨時表(本地或全域),其列與id作為主鍵的查詢結果相同。
2- 使用您的選擇陳述句將資料插入到臨時表中。
3- DataAdatper.selectQuery.commandText 設定為“select * from TempTable”
4- 更新命令現在基于一個簡單的選擇陳述句,因此可以使用 dataadapter.update(datatable) 將 datagridview/datatable 中的任何更改更新到臨時表
5-至于最終的資料庫更新,您可以使用以下陳述句
Update Prd
set Prd.FlagaWaznosci = TempTable.FlagaWaznosci ,Prd.Notatka = TempTable.Notatka etc.. all the fields that need to be updated
from my Products as Prd
Inner Join TempTable on TempTable.id = Prd.id
請注意,(5)中的更新將影響所有行,甚至是未更改的行。要解決此問題,您可以按照以下步驟操作
1- 將更改的 ID 保存在串列中。
List<string> lst = new List<string>();
foreach(DataRow dr in datatable.GetChanges(DataRowState.Modified))
{
lst.add(dr["id"].ToString());
}
2- 將您的串列轉換為要與 (5) 中的查詢連接的字串值
String strchange = String.Join(",",lst); //will give you id1,id2,...
//The update query becomes
Update Prd
set Prd.FlagaWaznosci = TempTable.FlagaWaznosci ,Prd.Notatka =
TempTable.Notatka etc.. all the fields that need to be updated
from my Products as Prd
Inner Join TempTable on TempTable.id = Prd.id
Where Prd.id In ( strchange )
uj5u.com熱心網友回復:
請單獨更新您的表格,因為在加入時您只會看到兩個或兩個以上的表格合并為一個表格形式。但你不能做任何粗魯的操作
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347375.html
標籤:C# sql-server sql数据适配器 sql命令生成器
下一篇:將行的總和計算為一列
