try open example error ejemplo duplicate conexion code catch c# sqlexception dapper

open - sqlexception en c#



Los parámetros dinámicos Dapper lanzan una SQLException "debe definir una variable escalar" cuando no se utilizan objetos anónimos (3)

Aunque esta respuesta no se relaciona con el problema del póster, tuve un problema similar con una solución diferente que compartiré aquí.

Estaba definiendo incorrectamente la lista de parámetros como un new []{ ... } :

var name = "myName"; var priority = 1; var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name"; connection_.Execute(command, new []{ priority, name });

Soltando el [] solucioné mi problema:

connection_.Execute(command, new { priority, name });

(Este código está usando Dapper Dot Net en C #)

Este código funciona:

var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name"; connection_.Execute(command, new { Name = "myname", Priority = 10 } );

Este código lanza una SqlException:

class MyAccount { public string Name; public int Priority; } var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name"; var acct = new MyAccount { Name = "helloworld", Priority = 10 }; connection_.Execute(command, acct);

System.Data.SqlClient.SqlException: Debe declarar la variable escalar "@Priority".

¿Por qué?


Implementa tu modelo con propiedades, no campos:

class MyAccount { public string Name { get; set; } public int Priority { get; set; } }

Dapper mira las propiedades del objeto para obtener parámetros, ignorando los campos. Los tipos anónimos funcionan porque están implementados con propiedades .


También tengo un mismo problema con el tipo de datos. Cuando realice una consulta con un objeto dinámico que tenga una propiedad DateTime, excepción: el miembro CreatedDate de tipo System.Object no se puede usar como valor de parámetro.

Funcionó cuando usé un POCO en lugar de dinámico más tarde.