Dapper NullReferenceException

c# dapper sql

문제

이 코드를 실행하면 NullReferenceException이 발생합니다.

var insertTransaction = @"INSERT INTO [192.168.1.55].databaseName.dbo.tableName
(Date, Desc) 
VALUES(GETDATE(), 
@Description)
SELECT Scope_identity()";

var result = _sqlMapper.Query<int>(insertTransaction,
             new
             {                           
                 Description = "some description"
             });

where _sqlMapper는 Dapper.SqlMapper의 인스턴스입니다 Dapper.SqlMapper

SELECT Scope_identity() 제거하면 예외가 발생하지 않습니다.

예외 스택 추적에 예외가 발생한다고 여기에 나와 있습니다.

Dapper.SqlMapper.d__11`1.MoveNext () in d : \ Dev \ dapper-dot-net \ Dapper NET40 \ SqlMapper.cs : 줄 1583

  1. SELECT Scope_identity() 가 null 객체를 만드는 이유는 무엇입니까? 어떻게 해결할 수 있습니까?
  2. 스택 트레이스가 로컬 컴퓨터에없는 파일 경로를 표시하는 이유는 무엇입니까?

업데이트 : Dapper 버전 = 1.40.0.0, 런타임 버전 = v4.0.30319 DLL = C : \ src \ packages \ Dapper.1.40 \ lib \ net45 \ Dapper.dll

업데이트 : Management Studio에서 쿼리를 실행하면 행이 삽입되지만 반환 된 scope_identity는 null입니다.

수락 된 답변

원격 / 연결된 서버에서는 Scope_identity가 작동하지 않습니다. 솔루션에 대한 다음 답변을 참조하십시오. 연결된 서버에서 삽입 된 행의 ID를 얻는 가장 좋은 방법은 무엇입니까?

내가 가장 좋아하는 방법 :

 SELECT *
 FROM OPENQUERY(server, '
     INSERT INTO database.schema.table (columns) VALUES (values);
     SELECT SCOPE_IDENTITY() AS ID');

또한 SCOPE_IDENTITY() 는 int가 아닌 10 진수를 제공합니다. 그리고 Dapper.SqlMapper.QueryIEnumerable 을 반환 할 것이고 1.28 이후 ExecuteScalar Dapper.SqlMapper.Query 가 있습니다.

이것이 당신을 도운다면 링크에서 대답을 upvote하는 것을 잊지 마십시오.


인기 답변

두 영역 모두 같은 범위에 있기 때문에 dapper와 Management Studio를 사용하면 예외가 발생합니다. SELECT SCOPE_IDENTITY()SELECT SCOPE_IDENTITY() 하면 같은 범위에 두 개의 문이 있으므로 항상 NullReferenceException 얻습니다.

세미콜론으로 SQL 문을 분리하면 제대로 작동합니다.

var insertTransaction = @"INSERT INTO [192.168.1.55].databaseName.dbo.tableName
(Date, Desc) 
VALUES(GETDATE(), 
@Description);
SELECT Scope_identity()";


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.