Cómo comparar cadena en consulta con Dapper

.net asp.net c# dapper sql-server

Pregunta

Hola, estoy usando Dapper y tengo esta consulta:

var sql = @"Select * From CartFilm Where IdUser = @IdUser;";
var sel = connection.Query<CartFilm>(, new { IdUser = user.Id}).FirstOrDefault();

user.Id = "fcdbdc10-c209-4f49-bcbf-c49fg91f70e2"

El problema es que no obtengo ninguna coincidencia.

Intenté encontrarlo directamente en MSSQL, donde utilicé la misma consulta con comillas simples y funciona bien. Pero si lo envío a través de Dapper no tengo resultados.

¿Hay alguna manera de hacer WHERE con esta cadena?

La columna es nvarchar (450)

Editar

Encontré la solución. Error en mi modelo de CartFilm porque tengo null en una columna, pero mi modelo no esperaba eso. Quiero gracias por tu tiempo!

Respuesta experta

Versión corta: lo que tienes en la pregunta es 100% correcto.

Versión más larga:

Dapper usa parámetros de consulta, que no requieren escapatoria (ni ningún otro tratamiento). Dado que está pasando new { someString = value } como el objeto de parámetro, el valor del value pasará como un parámetro de ADO.NET llamado someString .

Si value es la cadena que escribiría en C # como literal @"abc""def'ghi" (es decir: la secuencia de los puntos de código ASCII con valores hexadecimales 61-62-63-22-64-65 -66-27-67-68-69), luego en la base de datos se tratará como lo mismo - entonces: la cadena que escribiría en TSQL como el literal N'abc"def''ghi' (que es otra vez : la secuencia de puntos de código ASCII con valores hexadecimales 61-62-63-22-64-65-66-27-67-68-69).

Tenga en cuenta que el parámetro valores se envían de una manera diferente a la de control principal / lote, por lo que en realidad nunca se escribe de esta manera TSQL-codificado - eso es sólo cómo tratar con él en TSQL que le indiquen dónde sus comienza y termina literales. Los parámetros no necesitan eso , @someString es todo lo que necesita.

Entonces: si no coincide con nada, opciones:

  • el valor que crees que está allí: no existe en absoluto
  • el valor que cree que está allí: no está realmente allí, tal vez debido a problemas de codificación (caracteres invisibles unicode o datos no unicode ( varchar lugar de nvarchar ))
  • su base de datos está configurada para ser sensible a mayúsculas y minúsculas, y espera que no distinga entre mayúsculas y minúsculas (buscando foo cuando el valor es Foo )
  • hay otro error no relacionado en su consulta


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é