2016-07-12 14 views
0

オーナーとペットのデータをデータベースに入力するフォームがあります。ペットにはオーナーIDの外部キーがあり、所有者とペットのデータは同じ形式で入力されていますので、ownerIDがまだデータベースに設定されていない場合、ペットオブジェクトにオーナーIDを設定するにはどうすればよいですか?あるいは、私は最初にデータベースの所有者を設定する必要がありますか?C#外部キーを設定する

private int32 idOwner; 
private String name; 

クラスPet属性を属性Owner

クラス。

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またはEntity Frameworkは何を使用していますか? – Rahul

+0

emmmあなたは私にそこにいる、確かに、私はちょうどソリューションのサービスフォルダを作成し、接続メソッドを行う.......私はSystem.Data.SqlClientを使用しています....私は知らないあなた何か。 – DedalusNine

+0

'private Owner _Owner;'これを 'Pet'クラスに追加してください。私はこれが助けると思う。 – DhavalR

答えて

1

だから、挿入時に生成されますID列idOwnerを持っていて、PetオブジェクトにそのIDを設定します。次に、データベースから生成されたIDを選択して所有者オブジェクトを更新するために、OwnerService.addOwnerメソッドを変更する必要があります。

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; 
} 

次に、あなたのフォームコード:SCOPE_IDENTITY (Transact-SQL)ため

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; 

ドキュメント:

は 同じスコープ内でID列に挿入された最後のID値を返します。スコープとは、ストアドプロシージャ、トリガ、 関数、またはバッチです。したがって、同じストアドプロシージャ、ファンクション、またはバッチにある場合は、2つのステートメントは同じスコープになります。

+0

このように? ( "所有者の所有者) { 文字列sql =" INSERT INTO所有者(名) " +" VALUES( '"+所有者名+"') "; SELECT SCOPE_IDENTITY(ownerID); \t owner.idOwner = ownerID; connect(); SqlCommand cmd =新しいSqlCommand(SQL、接続); cmd.ExecuteNonQuery(); disconnect(); } – DedalusNine

+0

@DedalusNineこれにはc#の構文エラーはありません。このように、 'String sql =" INSERT INTO Owner(name) "+" VALUES( '"+ owner.Name +"'); SELECT SCOPE_IDENTITY(); ";' – user3185569

+0

@DedalusNine次にIDをaに設定する必要があります。変数: 'int ID =(int)cmd.ExecuteScalar();'それから 'owner.idOwner = ID;'それはクリアですか? – user3185569

関連する問題