J'ai une table qui contient une colonne décimale nullable (12,4). Quand je demande comme ceci:
const string sqlQuery = "SELECT Id From DummyTable WHERE Price = @Price";
var sqlParameter = new { Price = (decimal?)null };
cette requête renvoie 0 enregistrement. Mais quand je change la requête en:
const string sqlQuery = "SELECT Id From DummyTable WHERE Price IS NULL;
cette syntaxe fonctionne. Alors, comment puis-je interroger la colonne décimale nullable avec des paramètres? Merci.
Ce n'est pas très sexy, mais vous pouvez essayer quelque chose comme ça:
[Test]
public void NullParamTest()
{
_connection.Execute(@"drop table foo;
create table foo(id int not null,price decimal(12, 4) null)");
_connection.Execute("insert into foo values(1, null)");
_connection.Execute("insert into foo values(2, 12.99)");
const string sql = @"select price from foo
where coalesce(price, -1) = coalesce(@Price, -1)";
var result = _connection.Query<decimal?>(sql,new { Price = (decimal?)null }).FirstOrDefault();
Assert.That(result, Is.Null);
result = _connection.Query<decimal?>(sql,new { Price = 12.99 }).FirstOrDefault();
Assert.That(result, Is.EqualTo(12.99));
}
En supposant que "Prix" ne peut pas être négatif ...