3

嗨,我正在尝试掌握 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。

我在这里做错了什么?我用谷歌搜索,但可以找到一个具体的例子。

4

1 回答 1

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中列所隐含的属性:和.SELECTtypename

于 2012-06-22T20:20:19.327 回答