2016-07-12 3 views
0

소유자 및 애완 동물의 데이터를 데이터베이스에 입력하는 양식이 있습니다. 애완 동물은 소유자 ID의 외래 키를 가지고 소유자와 애완 동물의 데이터가 같은 양식으로 채워집니다. ownerID이 데이터베이스에 아직 설정되지 않은 경우 애완 동물 개체에 소유자 ID를 설정하려면 어떻게해야합니까? 아니면 먼저 데이터베이스에 소유자를 설정해야합니까?C# 외래 키 설정

private int32 idOwner; 
private String name; 

클래스 Pet 속성 속성 Owner

클래스;

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

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

양식 그래서 당신은 삽입에 생성됩니다 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 값을 반환합니다. 범위는 모듈 : 저장 프로 시저, 트리거, 함수 또는 일괄 처리입니다. 따라서 이 동일한 저장 프로 시저, 함수 또는 일괄 처리에있는 경우 두 문은 동일한 범위에 있습니다.

+0

좋아요? public static void addOwner (소유자 소유자) { 문자열 sql = "INSERT INTO 소유자 (이름)" + "VALUES ('"+ 소유자. 이름 + "')"; 선택 SCOPE_IDENTITY (소유자 ID); \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