嗨,我正试图抓住Dapper。
我的情况是我想将查询中的两个值拉到两个单独的字符串中。我不确定我是否以正确的方式解决这个问题,但这就是我正在做的事情:
string sql = @"Select type, name
FROM ZipData
WHERE Zip = @zip";
using (var multi = conn.QueryMultiple(sql, new { zip = zip }))
{
string result = multi.Read<string>().SingleOrDefault();
}
我得到了无法访问已处置的对象。对象名称:'GridReader'。当试图读取第二个字符串时。事情是它正确获取第一个值并且在我想要的读者中有两个字段。我确定我误用了api。
我在这里做错了什么?我用谷歌搜索,但可以找到一个具体的例子。
答案 0 :(得分:10)
您误用了QueryMultiple
。这是为返回多个结果集的复合SQL语句定义的。类似的东西:
SELECT Foo FROM MyTable;
SELECT Bar FROM MyOtherTable;
另一方面,您尝试从单个结果集中获取两个不同的列,因此您应该只使用普通的Query
方法:
var result = conn.Query(sql, new { zip = zip }).Single();
var type = result.type;
var name = result.name;
Query
返回一个可枚举的(因为通常一个查询可以返回多行)。看来你只想要一行,所以我们在最后调用.Single
来获取那一行。从那里开始,返回类型为dynamic
,因此您只需引用SELECT
语句中列所隐含的内容:type
和name
。