2016-07-12 88 views
0

我有一個窗體可以將一個所有者和一個寵物的數據輸入到數據庫中。寵物擁有所有者ID的外鍵,所有者和寵物的數據填寫在同一表格中,那麼如果ownerID尚未在數據庫中設置,我如何在寵物對象中設置所有者ID?或者只是我必須首先在數據庫中設置所有者?C#設置外鍵

Owner屬性Pet

private int32 idOwner; 
private String name; 

類屬性;

private int32 Pet; 
private int32 idOwner; // foreign key 
private String name; 

形式

Owner owner = new Owner(); 
owner.Name = this.ownerNameTxt.Text.Trim(); 
OwnerService.addOwner(owner); // add owner to database 

Pet pet = new Pet(); 
pet.name = this.petNameTxt.Text.Trim(); 
pet.idOwner = ???????? 
+0

你在使用ADO.NET或實體框架? – Rahul

+0

emmm你讓我在那裏,林不知道,我只是在解決方案中創建一個服務文件夾,並執行連接方法.......我使用System.Data.SqlClient ....我不知道這是否告訴你任何事情。 – DedalusNine

+0

'私人所有者_Owner;'你應該把它添加到'寵物'類。我認爲這會有所幫助。 – DhavalR

回答

1

所以你有大幹快上插入生成的標識列idOwner和你想要設置ID在Pet對象。然後,您需要修改OwnerService.addOwner方法,以便從數據庫中選擇生成的ID並更新所有者對象。

private void addOwner(owner) 
{ 
    // your current logic here but modify to 
    // add ;SELECT SCOPE_IDENTITY(); at the end of your insert query. 
    // and store it in a local int. eg int ownerID = (int)cmd.ExecuteScalar(); 

    owner.idOwner = ownerID; 
} 

然後你的表單代碼:

Owner owner = new Owner(); 
owner.Name = this.ownerNameTxt.Text.Trim(); 
OwnerService.addOwner(owner); // add owner to database 

Pet pet = new Pet(); 
pet.name = this.petNameTxt.Text.Trim(); 
pet.idOwner = owner.idOwner; 

文檔爲SCOPE_IDENTITY (Transact-SQL)

返回插入標識列在 同一範圍內的最後一個標識值。範圍是一個模塊:存儲過程,觸發器,函數或批處理。因此,如果 它們處於相同的存儲過程,函數或批處理中,則兩個語句在相同的範圍內。

+0

是否這樣? public static void addOwner(Owner owner) { String sql =「INSERT INTO Owner(name)」 +「VALUES('」+ owner.Name +「')」; SELECT SCOPE_IDENTITY(ownerID); \t owner.idOwner = ownerID; connect(); SqlCommand cmd = new SqlCommand(sql,connection); cmd.ExecuteNonQuery(); disconnect(); } – DedalusNine

+0

@DedalusNine這沒有c#語法錯誤。就像這樣:'字符串SQL = 「INSERT INTO所有者(名稱)」 + 「VALUES( '」 + owner.Name + 「'); SELECT SCOPE_IDENTITY();」' – user3185569

+0

@DedalusNine,那麼你需要的ID設置爲變量:'int ID =(int)cmd.ExecuteScalar();'then'owner.idOwner = ID;'它清楚了嗎? – user3185569