30

(このコードはC#でDapper Dot Netを使用しています)

このコードは機能します:

var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name";
connection_.Execute(command, new { Name = "myname", Priority = 10 } );

このコードはSqlExceptionをスローします:

class MyAccount 
{
    public string Name;
    public int Priority;
}

var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name";
var acct = new MyAccount { Name = "helloworld", Priority = 10 };
connection_.Execute(command, acct);

System.Data.SqlClient.SqlException:スカラー変数「@Priority」を宣言する必要があります。

なんで?

4

3 に答える 3

38

フィールドではなく、プロパティを使用してモデルを実装します。

class MyAccount 
{
    public string Name { get; set; }
    public int Priority { get; set; }
}

Dapperは、フィールドを無視して、オブジェクトのプロパティを調べてパラメーターを取得します。匿名型は、プロパティを使用して実装されているため、機能します。

于 2011-11-22T16:53:29.530 に答える
2

この回答は投稿者の問題とは関係ありませんが、ここで共有する別の修正で同様の問題が発生しました。

new []{ ... }パラメータリストを誤って:として定義していました

var name = "myName";
var priority = 1;
var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name";
connection_.Execute(command, new []{ priority, name });

[]解決した私の問題を削除します:

connection_.Execute(command, new { priority, name });
于 2016-04-15T14:03:07.800 に答える
1

データ型についても同じ問題が発生しました。DateTimeプロパティを持つ動的オブジェクトを使用してクエリを実行する場合、例外:System.Object型のメンバーCreatedDateをパラメーター値として使用することはできません。

後で動的ではなくPOCOを使用したときに機能しました。

于 2012-03-01T17:36:06.377 に答える