Dapper:浮動小数点数を解析できません(列の解析エラー)

asp.net-mvc dapper sql-server

質問

私はDapperを使用してStoredProcedureからSQL Serverからデータを取得していますが、エラーが発生しています

Specified cast is not valid.

詳細:

Error parsing column 4 (SubTotal=0.00 - Decimal)

SQL Server側では、列SubTotaldecimal(18, 2) NULLABLE SubTotalで、.NET側ではdecimal? 。取り出されるデータは0.00です。

私はこの答えを確認しました。列Xの解析中にエラーが発生しました

答えごとに、私は

il.Emit(OpCodes.Ldtoken, unboxType);

〜と

il.Emit(OpCodes.Ldtoken, Nullable.GetUnderlyingType(unboxType) ?? unboxType);

2360行で同じエラーが発生しています。

誰でもこれについてのアイデアはありますか?ありがとう。

更新

私は列をnullにできないようにしようとしました。また、列をfloat (SQL Server上)およびdouble (.NET側)に変更しようとしました。これらのどれもうまくいかず、同じエラーが発生していました。その後、私は列をintに変更し、コードは正常に動作します。しかし、私は金銭的価値観を持って作業しており、浮動小数点数を使用したいと考えています。さらに調査する...

私は次のようにストアドプロシージャを実行しています

var transaction = this.db.Query<PaymentTransactions>("usp_PaymentTransactionsGetSingleIfPaid", new { registrationId }, commandType: CommandType.StoredProcedure);

情報を返すストアドプロシージャの関連部分は次のとおりです。

SELECT * FROM PaymentTransactions WHERE RegistrationId = @registrationId AND TransactionStatus = 'SUCCESS';

更新2

Dapperはうまく動作しています。多分私の開発環境に何か問題がありました。 VSが再起動しただけです。

受け入れられた回答

下のスニペットが期待どおりに動作することを確認したので、これはDapper固有のものではないようです。

プロシージャがPaymentTransactionsにマップする必要があるものを正確に返すように、列名を明示的に(select *ではなく)列挙してみてください。可能性があります別の小数点以下の列がmisnamedですか?

これは.Net45でDapper v1.13を使用しています:

手順:

create procedure dbo.Test
as
select  [SubTotal] = cast('0.01' as decimal(18,2)) 
union all 
select null;

Linqpad:

void Main()
{
    using (IDbConnection cnn = GetOpenConnection())
    {
        var users = cnn.Query<Sale>("yak.dbo.test", new { }, commandType: CommandType.StoredProcedure);
        users.Dump();

    }
}

public static readonly string connectionString = "Data Source=.;Initial Catalog=tempdb;Integrated Security=True";

public static IDbConnection GetOpenConnection()
{
  var connection = new SqlConnection(connectionString);
  connection.Open();
  return connection;
}

public class Sale
{
   public decimal? SubTotal;
}

戻り値:

ここに画像の説明を入力


人気のある回答

笑ってはいけませんが、私はASP.NET MVCプロジェクトでDapperとまったく同じ問題を抱えていました。@erdingerのコメントのような解決策も私のために働いていました。

  • Visual Studioを閉じる
  • Visual Studioを再起動します。

問題はこのように修正されました...



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ