Dapper NullReferenceException

c# dapper sql

Pregunta

Obtengo una NullReferenceException cuando ejecuto este código:

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"
             });

donde _sqlMapper es una instancia de Dapper.SqlMapper

Si SELECT Scope_identity() no obtengo la excepción.

El seguimiento de pila de excepción dice que la excepción se arroja aquí:

en Dapper.SqlMapper.d__11`1.MoveNext () en d: \ Dev \ dapper-dot-net \ Dapper NET40 \ SqlMapper.cs: línea 1583

  1. ¿Por qué SELECT Scope_identity() crea un objeto nulo y cómo puedo solucionarlo?
  2. ¿Por qué el seguimiento de la pila muestra una ruta de archivo que no existe en mi máquina local?

ACTUALIZACIÓN: Dapper versión = 1.40.0.0, Runtime Version = v4.0.30319 DLL = C: \ src \ packages \ Dapper.1.40 \ lib \ net45 \ Dapper.dll

ACTUALIZACIÓN: si ejecuto la consulta en Management Studio, la fila se inserta, sin embargo, la scope_identity devuelta es nula.

Respuesta aceptada

Scope_identity no funcionará en servidores remotos / vinculados. Consulte la siguiente respuesta para encontrar una solución: ¿la mejor manera de obtener la identidad de la fila insertada en el servidor vinculado?

Mi método favorito:

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

También tenga en cuenta que SCOPE_IDENTITY() da un decimal no un int. Y Dapper.SqlMapper.Query devolverá un IEnumerable , hay un método ExecuteScalar desde 1.28.

Recuerde invitar a la respuesta en el enlace si esto lo ayudó.


Respuesta popular

obtiene la excepción con dapper y Management Studio porque ambos están en el mismo ámbito. cuando SELECT SCOPE_IDENTITY() , hay dos instrucciones que en el mismo ámbito, por lo tanto, siempre obtiene NullReferenceException

si separa la instrucción SQL con el punto y coma, y ​​debería funcionar

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué