2013-07-19 6 views
0

이전과 같은 몇 가지 질문이 있지만 답변을 실제로 이해하지 못했습니다. 여기에 지금은 @ResultID에 대한에 대한 자리 표시 자 Id을 사용하고 내 쿼리SQL 인서트로 자동 증가

using (SqlCommand cmd = new SqlCommand(
    "INSERT INTO Results VALUES(@ResultID, @HasSucceeded, @ScenarioID, @Screenshot)", 
    conn)) 
{ 
    cmd.Parameters.AddWithValue("@ResultID", Id); 
    cmd.Parameters.AddWithValue("@HasSucceeded", HasSucceeded); 
    cmd.Parameters.AddWithValue("@ScenarioID", Id); 
    cmd.Parameters.AddWithValue("@Screenshot", screenshot); 

    cmd.ExecuteNonQuery(); 
} 

입니다. 내가 정말로하고 싶은 것은 autoincrement@ResultID이고,이 INSERT INTO 쿼리입니다. 어떻게해야합니까?

+6

, 난에 리뷰를 한 경우에이 코드는 어느 날 과거 얻을 것입니다 의심 그것. INSERT 문에서 값만이 아닌 열 이름을 지정하십시오. 나 한테 고마워 할 수있어. ';)'(코드 구조와 호환되지 않는 테이블 구조가 생기면 예기치 않은 열에 삽입 된 데이터가 아닌 예외가 발생합니다.) –

+6

IDENTITY 열을 사용하면 문제가 해결됩니다. 그것을 삽입하는 값을 말하지 마라 : 그것은 그 자체를한다) –

+0

@MarcGravell 가치가 나중에 필요할 경우 OP가 도움이되는지 모르겠다. 이 경우 저장 프로 시저가 호출되기 시작합니다. (어쨌든 호출 될지도 모르지만 특히 ...) –

답변

3

IDENTITY 열 (예 : IDENTITY (1,1))로 설정하고 데이터베이스에서이를 관리하게하십시오. 외부에서 그것을 관리하려고 시도하는 것은 대단한 악몽입니다. 그 다음이 (가 오류로 인해 같은 소리 2 열, 대한 ID를 사용하여에 비정상적으로 복잡 것을주의)이된다 : 여담으로

int newId = 0; 

using (SqlCommand cmd = new SqlCommand(
    @"INSERT INTO Results (HasSucceeded, Screenshot) 
     VALUES (@HasSucceeded, @Screenshot); 
     DECLARE @ResultID int = SCOPE_IDENTITY(); 
     UPDATE Results SET ScenarioID = @ResultID 
        WHERE ResultID = @ResultID; 
     SELECT @ResultID;", conn)) 
{ 
    cmd.Parameters.AddWithValue("@HasSucceeded", HasSucceeded); 
    cmd.Parameters.AddWithValue("@Screenshot", screenshot); 

    newId = (int)cmd.ExecuteScalar(); 
} 

// ...Use newId here... 
+0

이것이 ID가되어야한다는 것에 동의하는 반면, 그렇지 않으면이 테이블에 다른 코드가 삽입됩니다 (이 응용 프로그램에서 다른 응용 프로그램 또는 데이터 가져 오기에서 가져온 경우) 중단 될 수 있습니다. – HLGEM