3

こんにちは、Dapper を理解しようとしています。

私の状況は、クエリから 2 つの値を 2 つの別々の文字列にプルしたいということです。これについて正しい方法で行っているかどうかはわかりませんが、これが私がやっていることです:

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'. 2番目の文字列を読み取ろうとすると、最初の値が正しく取得され、取得しようとしているリーダーに両方のフィールドが含まれます。APIを誤用していると確信しています。

ここで何が間違っていますか?私はグーグルで検索しましたが、特定の例を見つけることができます。

4

1 に答える 1

10

You are mis-using QueryMultiple. That is defined for compound SQL statements that return multiple result sets. Something like:

SELECT Foo FROM MyTable;
SELECT Bar FROM MyOtherTable;

On the other hand, you are trying to get two different columns from a single result set, so you should just use the normal Query method:

var result = conn.Query(sql, new { zip = zip }).Single();
var type = result.type;
var name = result.name;

Query returns an enumerable (because generally a query can return multiple rows). It appears that you only want one row, however, so we invoke .Single at the end to just get that row. From there, the return type is dynamic so you can simply refer to the properies implied by the columns in your SELECT statement: type and name.

于 2012-06-22T20:20:19.327 に答える