c#
  • asp.net
  • .net
  • sql-server
  • 2016-12-08 4 views 1 likes 
    1

    SMALLINT 인 ID를 얻으려는 중입니다. 삽입문에 OUTPUT을 사용하고 DataContext.ExecuteQuery (또는 DataContext 방법이 더 적절할 것입니다)을 사용하고 있습니다.여기에 "지정된 캐스트가 유효하지 않습니다"오류를 어떻게 해결할 수 있습니까?

    시도 :

      string query = [email protected]" 
           DELETE FROM MyTable WHERE [Name] = '{name}' 
           INSERT INTO MyTable ([Name], ...) 
           OUTPUT INSERTED.ID 
           VALUES ('{name}', ...)"; 
          short id = (short)context.ExecuteQuery<int>(query).Single(); 
    

    와 나는 오류

    System.InvalidCastException was unhandled by user code 
        HResult=-2147467262 
        Message=Specified cast is not valid. 
        Source=System.Data 
        StackTrace: 
         at System.Data.SqlClient.SqlBuffer.get_Int32() 
         at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) 
         at Read_Int32(ObjectMaterializer`1) 
         at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() 
         at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source) 
    

    내가 SCOPE_IDENTITY()를 사용하여 시도와 같은 일이 일어났다을 얻을.

    +0

    쿼리가 유효합니까? '@'를 사용하기 때문에,'query' 문자열은 새로운 라인으로 시작합니다. 같은 줄에 문자열을 시작하여 제거 할 수 있습니다 :'string query = $ @ "MyTable WHERE [Name] = '{name}'..."'에서 삭제하십시오. – Quantic

    +0

    @Quantic은 중요하지 않아야합니다. – Hogan

    +0

    빈 목록에서 싱글이 실패합니다.'FirstOrDefault()'를 시도해보고 도움이되는지 확인하십시오. – Hogan

    답변

    0

    OUTPUT INSERTED.ID

    을 제거하고

    를 추가; 따옴표

    하는 executeQuery 내부 선택 SCOPE_IDENTITY() 끝에

    는 값이 출력 변수 상이한 결과 집합에 반환 될 것으로 기대하고있다. InvalidCastException는, 결과 세트 (null)를 int로 변환하려고했을 때옵니다.

    0

    시도 : INT32를 반환하는 SQL 서버를 기대하고 INT16을 얻고 때 CAST 예외 코드에서 어떤 일이 일어나고

    short id = context.ExecuteQuery<short>(query).Single(); 
    

    있다.

     관련 문제

    • 관련 문제 없음^_^