ホームページ > バックエンド開発 > C++ > C# データベース操作での「オブジェクトを DBNull からキャストできません」エラーを修正する方法

C# データベース操作での「オブジェクトを DBNull からキャストできません」エラーを修正する方法

Susan Sarandon
リリース: 2025-01-11 15:12:42
オリジナル
586 人が閲覧しました

How to Fix

C# データベース操作での「オブジェクトを DBNull からキャストできません」のデバッグ

C# アプリケーションは、データベースの対話中、特に Create メソッド内で、「オブジェクトを DBNull から他の型にキャストできません」例外をスローします。 このエラーは、データベースの NULL 値 (ADO.NET では DBNull として表されます) を整数などの null 非許容型に変換しようとしたことが原因で発生します。 問題は、ストアド プロシージャ op_Id からの出力パラメータ sp_Register がどのように処理されるかにあると考えられます。

これを修正するには、出力パラメータをキャストする前に DBNull チェックを実装します。

<code class="language-csharp">var outputParam = dataAccCom.GetParameterValue(IDbCmd, "op_Id");
if (outputParam != DBNull.Value)
{
    DataTO.Id = Convert.ToInt64(outputParam);
}
else
{
    // Handle the case where op_Id is NULL.  Options include:
    // 1. Assign a default value: DataTO.Id = -1;  (or another appropriate default)
    // 2. Throw a more informative exception: throw new Exception("op_Id returned NULL from sp_Register");
    // 3. Set a flag indicating a failure: DataTO.IdIsAssigned = false;
}</code>
ログイン後にコピー

このコード スニペットは、変換を試行する前に、outputParamDBNull.Value ではないことを明示的に検証します。 else ブロック内で適切なアクションを選択するかどうかは、アプリケーションのロジックによって異なります。デフォルト値の割り当て、カスタム例外のスロー、またはステータス フラグの設定はすべて実行可能なオプションです。

さらに、ReplaceNull ヘルパー メソッドを確認してください。 渡されたすべてのデータ型、特に DateTime が正しく処理されることを確認します。 単に現在の時刻に置き換えるのではなく、コンテキストに応じて、DateTime.MinValuedefault(DateTime) などのより適切なデフォルトを使用することを検討してください。 堅牢な ReplaceNull メソッドは次のようになります。

<code class="language-csharp">public static object ReplaceNull(object value, Type type)
{
    if (value == DBNull.Value)
    {
        if (type == typeof(string)) return "";
        if (type == typeof(int)) return 0;
        if (type == typeof(DateTime)) return DateTime.MinValue;
        // Add more types as needed...
        return default(object); // Or throw an exception if an unexpected type is encountered
    }
    return value;
}</code>
ログイン後にコピー

これらの変更を組み込むことで、キャスト例外を防ぎ、NULL 値を適切に処理して、データベース対話コードの堅牢性を向上させます。 アプリケーションのエラー処理戦略に最適な else ブロック動作を選択することを忘れないでください。

以上がC# データベース操作での「オブジェクトを DBNull からキャストできません」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート