2014-04-01 64 views
0

我有兩個表。SqlDataAdapter問題

客戶(INT ID,nvachar名(250),INT年齡)

獎金(INT ID,INT CUSTOMER_ID參照客戶(ID),INT someAmount)

我需要添加,刪除,更新有關客戶和獎金的信息。

當我添加一個新客戶時,程序會自動在表Bonus中爲該客戶創建一個新條目。
當我刪除客戶時,程序在表格紅利中刪除關於此客戶的條目。

存在將其保存到sql數據庫的問題。

我有這方面的SQL命令:

//Bonus 
SqlCommand inscmdT = new SqlCommand(); 
inscmdT.CommandText = "Insert into Bonus (customer_id, someAmount) values(@customer_id, @someAmount); select id = @@IDENTITY from Bonus"; 
inscmdT.Connection = conn; 
inscmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id"); 
inscmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount"); 

SqlCommand updcmdT = new SqlCommand(); 
updcmdT.CommandText = "UPDATE Bonus SET customer_id = @customer_id, someAmount = @someAmount WHERE id = @id"; 
updcmdT.Connection = conn; 
updcmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id"); 
updcmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount"); 
updcmdT.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id"); 

SqlCommand delcmdT = new SqlCommand(); 
delcmdT.CommandText = "DELETE FROM Bonus WHERE id = @id"; 
delcmdT.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id"); 
delcmdT.Connection = conn; 


//Customers 

SqlCommand inscmdS = new SqlCommand(); 
inscmdS.CommandText = "Insert into Customers (SessionTime, movie, hall, age) values(@SessionTime, @age); select id = @@IDENTITY from Customers"; 
inscmdS.Connection = conn; 
inscmdS.Parameters.Add("@SessionTime", SqlDbType.NVarChar, 250, "SessionTime"); 
inscmdS.Parameters.Add("@age", SqlDbType.Int, sizeof(Int32), "age"); 

SqlCommand updcmdS = new SqlCommand(); 
updcmdS.CommandText = "UPDATE Customers SET SessionTime = @SessionTime, age = @age WHERE id = @id "; 
updcmdS.Connection = conn; 
updcmdS.Parameters.Add("@SessionTime", SqlDbType.NVarChar, 250, "SessionTime"); 
updcmdS.Parameters.Add("@age", SqlDbType.Int, sizeof(Int32), "age"); 
updcmdS.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id"); 

SqlCommand delcmdS = new SqlCommand(); 
delcmdS.CommandText = "DELETE FROM Customers WHERE id = @id"; 
delcmdS.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id"); 
delcmdS.Connection = conn; 

如何正確地寫上刪除,插入一個SqlDataAdapter,更新嗎?

+0

你使用Visual Studio嗎? – RadioSpace

回答

0

的解決方案是使用級聯在Customers表中刪除。

0

SqlDataAdapter用於填充基於選擇查詢的數據集。這不是你似乎在尋找的東西。

相反,繼續使用SqlCommand對象,使用引用here的ExecuteNonQuery()方法。你改變你的數據集後

//Bonus 
SqlCommand inscmdT = new SqlCommand(); 
inscmdT.CommandText = "Insert into Bonus (customer_id, someAmount) values(@customer_id,  @someAmount); select id = @@IDENTITY from Bonus"; 
inscmdT.Connection = conn; 
inscmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id"); 
inscmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount"); 
inscmdT.ExecuteNonQuery(); 

+0

參數化查詢'(@name nvarchar(250),@ age int)Inse'需要參數'@name',該參數未提供。 – user2963950

0

調用SqlDataAdapter.Update(dataset)

所以,你將有代碼看起來像這樣。只要你有適當的命令設置。您已設置已經只需要分配

SqlDataAdpater.DeleteCommand = delCMDT; 
SqlDataAdapter.UpdateCOmmand = updCMT; 
SQlDataAdapter.InsertCommand = incmdT 

它會使事情更容易,如果你可以用Visual Studio創建比這一切都爲你做一個類型化的DataSet。根據你的數據庫模式。我也不確定這些poarams如何處理無類型的數據集,因爲我總是使用鍵入的數據集。你可以讓自己雖然很tediuos

SqlDataAdapter

+0

問題是更新表格。當我添加新客戶時,首先必須更新Customers表,然後更新Bonus表。當我刪除客戶時,首先從Bonus表中刪除條目,然後從Customers表中刪除條目。如果我以錯誤的順序執行操作,則我遇到了外鍵問題。 – user2963950

+0

@ user2963950 - 你會的。你將需要2個SqlDataAdapter。你在使用Visual Studio嗎?你可以用它連接到數據庫嗎?這將簡化這很多。無論如何,我會設置一個類似dataAdapterManager的包裝類來處理調用update和fill的順序 – RadioSpace