2016-06-21 12 views
-1

古いC#アプリケーションをC#(および.NETフレームワーク)の最新バージョンに移行中であり、テスト中に問題が発生しました。大胆なデータアクセスコード。C#SqlParameter 0が 'default'に変更されました

具体的には、「@BalanceForward」という名前のSqlParameterを作成しています。この特定のケースでは、値をゼロに設定していますが、明らかに他の値であってもかまいません。ストアドプロシージャを実行するとき、プロシージャが '@BalanceForward'というパラメータを期待していたが、指定されていないというエラーが戻ってきました。奇妙なあなたが見ることができるように

私たちは、SQLトレースを実行し、以下を見て...

幹部usp_Transaction_Create @ ID =「ダミーの値」、@ BalanceForward =デフォルト

、ゼロ金額は変更されます舞台裏では「デフォルト」になっています。これは.NETフレームワークの動作の変更でなければなりません。まだ稼働中のバージョンからSQLトレースを見ると、ゼロ金額は0.00として渡されます。

これを無効にする方法はありますか?「デフォルト」ではなく実際の値を渡すだけですか?これが起こる可能性を説明するために、何百ものストアドプロシージャを実際に実行する必要はありません。

+2

このエラーを引き起こすコードがないと、何も言い難いです。この基本機能が変更されていないことを確かめてください。 – Steve

+1

どのようにパラメータの値を設定していますか? http://stackoverflow.com/questions/5356862/sqlparameter-with-default-value-set-to-0-doesnt-work-as-expectedを参照してください。 – Nikki9696

答えて

0

私たちは、しかし...

cmd.Parameters.Add(DataFactory.CreateParameter("@BalanceForward", 0)); 

public static DbParameter CreateParameter(string name, object value) 
{ 
    DbParameter param = _dataFactory.CreateParameter(); 
    param.ParameterName = name; 
    if (value == null) 
     param.Value = DBNull.Value; 
    else 
     param.Value = value; 
    return param; 
} 

をこのコードを使用していた - 私たちは今、SqlParameterオブジェクトにいくつかの時点で添加したAddWithValueオプションに出くわしてきました。抽象的なDbCommand、DbConnection、DbParameterなどのオブジェクトを使用していて、app.config設定でプロバイダに渡していました。

抽象バージョンからSqlParameterオブジェクトに切り替えて、AddWithValueオプションを使用して問題を解決しました。今度は、DbParameterオブジェクトを使ってそれを行う方法を理解し、すべての抽象コードをSystem.Data.SqlClientバージョンに変換するか、すべてのストアドプロシージャを変更することです。

関連する問題