c# - SqlBuilder 返回错误的结果
问题描述
我有一个使用Npgsql
and的查询Postgres
。为了构建我的查询,我使用 Dapper 及其 SqlBuilder。
当我在数据库中进行正常语句时,它会返回正确的结果。当我通过 SqlBuilder 执行此操作时,它返回错误的结果。
我尝试了不同的方式,更改了addTemplate
or 参数,但没有任何改变。
我还尝试以builder.Where("period = @period", new { model.Period });
不同的方式更改线路:
builder.Where("period = @Period", new { model.Period });
builder.Where("period = period", new { model.Period });
builder.Where("period = @TestPeriod", new { TestPeriod = model.Period });
或者这是一种更常见的方式:
builder.Where("period = '" + model.Period + "'");
using (NpgsqlConnection con = Helper.GetNpgsqlConnection())
{
var builder = new SqlBuilder();
var selector = builder.AddTemplate("SELECT * FROM szzRecord.folders /**where**/");
if (model.Period != null)
builder.Where("period = @period", new { model.Period });
var result = con.Query(selector.RawSql);
return result;
}
例如,普通 sql 查询的结果:SELECT * FROM szzRecord.folders WHERE period = 24
返回 251 行 - 这是正确的。
dapper 查询的结果是 1223,它们都是行。所以看起来参数不存在。在期待selector
我找到我的参数period
。我Period = 24
在selector.parameters.templates[0]
. 这个对吗?selector.parameters.parameters
是空的。
解决方案
您需要将SqlBuilder
's 参数传递到您的查询中。你有:
var result = con.Query(selector.RawSql);
将其更改为:
var result = con.Query(selector.RawSql, selector.Parameters);
推荐阅读
- http - Ionic 3 cordova 高级 http 插件无法在 T-mobile 上运行
- c++ - 迭代 unordered_map 的复杂性是什么
- java - 通过JAVA将十六进制插入mysql?
- json - 将 REST API JSON 模式转换为 CQL Cassandra 模式
- javascript - TMDB API 元素未显示在屏幕上 - React
- python - Python 测试速率限制处理程序
- oracle - 使用 REFERENCES 的 Oracle Sql 表和查询
- c++ - CS 3861 未找到标识符错误
- chart.js - Chartjs 未从 vuex 映射状态读取数据
- node.js - 带有 node.js 的在线编译器