복붙노트

[SQL] 지정한 캐스트가 검색 중 SCOPE_IDENTITY 동안 유효하지 않습니다

SQL

지정한 캐스트가 검색 중 SCOPE_IDENTITY 동안 유효하지 않습니다

나는 예외를 얻고있다 : "지정한 캐스트가 잘못되었습니다", 여기에 코드입니다

con.Open();
string insertQuery = @"Insert into Tender (Name, Name1, Name2) values ('Val1','Val2','Val3');Select Scope_Identity();";

SqlCommand cmd = new SqlCommand(insertQuery, con);
cmd.ExecuteNonQuery();
tenderId = (int)cmd.ExecuteScalar();

해결법

  1. ==============================

    1.완전성의 이익에서 코드 샘플과 함께 세 가지 문제가있다.

    완전성의 이익에서 코드 샘플과 함께 세 가지 문제가있다.

    1) 당신은 ExecuteNonQuery는 및 ExecuteScalar는 호출하여 두 번 쿼리를 실행하고 있습니다. 그 결과로, 당신은 당신의 테이블에이 기능이 실행될 때마다 두 개의 레코드를 삽입합니다. 두 가지 문을하면서 당신의 SQL, 함께 실행 따라서 당신은 단지 ExecuteScalar는 호출이 필요합니다.

    2) SCOPE_IDENTITY () 진수를 반환합니다. 당신도 당신의 쿼리의 결과에 Convert.ToInt32를 사용하거나 INT에 다음 소수점 반환 값을 캐스팅 할 수 있습니다.

    3) 제대로 배치되도록 문을 사용하여 연결 및 명령 개체를 포장해야합니다.

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (SqlCommand command = new SqlCommand(sql, connection))
        {
            connection.Open();
            int tenderId = (int)(decimal)command.ExecuteScalar();
        }
    }
    
  2. ==============================

    2.이 시도:-

    이 시도:-

    con.Open();
    string insertQuery = @"Insert into Tender (Name, Name1, Name2) values ('Val1','Val2','Val3');Select Scope_Identity();";
    
    SqlCommand cmd = new SqlCommand(insertQuery, con);
    tenderId = Convert.ToInt32(cmd.ExecuteScalar());
    

    편집하다

    제대로 그 SCOPE_IDENTITY () 숫자 (38,0)를 반환 지적되고 그것은이를해야한다 : -

    tenderId = Convert.ToInt32(cmd.ExecuteScalar());
    

    참고 : 당신은 여전히를 제거해야합니다 -

    cmd.ExecuteNonQuery();
    
  3. ==============================

    3.다음 첫 테스트 :

    다음 첫 테스트 :

    object id = cmd.ExcuteScalar()
    

    브레이크 포인트를 설정하고 아이디의 유형을 살펴 있습니다. 그것은 아마 소수이며, 직접 int로 캐스트 할 수 없습니다.

  4. ==============================

    4.그것은 Convert.ToInt32 (cmd.ExecuteScalar을 ())이 필요;

    그것은 Convert.ToInt32 (cmd.ExecuteScalar을 ())이 필요;

  5. from https://stackoverflow.com/questions/3027755/specific-cast-is-not-valid-while-retrieving-scope-identity by cc-by-sa and MIT license