5

メソッドに渡された 1 つのデータ テーブルからローカル データベースの別のデータ テーブルにデータをロードしようとしている WCF サービスに取り組んでいます (この場合、「ローカル」データベースは SQL Server データベースです)。 Windows 2003 サーバー上)。すると、次のエラーメッセージが表示されます。

「テーブル 'ASIVocationalNeeds' の列 'VocNeedDesc' の値は DBNull です。」

これは、テーブル ASIVocationalNeeds の列 VocNeedDesc で NULL が許可されているため、実際には問題ありません。本来は渡されたテーブルの VocNeedDesc の値をローカルテーブルに代入しただけなのですが、そのエラーが出てしまいました。次に、VocNeedDesc の値をチェックして null かどうかを確認するようにコードを変更し、null である場合は string.Empty を値に割り当て、それ以外の場合は渡された値を割り当てましたが、それでもエラー メッセージが表示されます。私は困惑しています。なぜこのエラーが発生するのかわかりません。関連するコード セグメントは次のとおりです。

localEmploy.ASIVocationalNeeds.Rows.Add(clientNumber,
    caseNumber,
    0,
    EmploymentDataSet.ASIVocationalNeeds[i].VocNeedType,
    (EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc == null ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));

これを行うための魔法のツールは知りませんが、これらのタスクを実行するのに役立つ可能性のあるいくつかのツールは、Phrake と Composer です。

Phakeは、Ruby の Rake util の PHP バージョンです。これらのスクリプトを使用して、データベースをセットアップし、ファイルを更新し、単体テストを実行できます。

パッケージ管理では、Composerを使用して依存関係を管理できます (これらのシステムのパッケージに依存している場合は、PEAR からダウンロードすることもできます)。もちろん、これをビルド スクリプトに組み込むこともできます。

4

2 に答える 2

7

DBNull チェックは、列全体ではなくセル値に適用されます

だからこれを試してください

EmploymentDataSet.ASIVocationalNeeds.Rows[i]["VocNeedDesc"] == DBNull.Value ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));

typeDatset を使用している場合は、null 値を次のようにチェックできます。

((ASIVocationalNeedsRow)EmploymentDataSet.ASIVocationalNeeds.Rows[i]).isVocNeedDescnull() ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));
于 2012-04-18T04:48:08.833 に答える
0

DBNull.Valueと比較してみましたか?

コードは次のように見える場合があります

EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc == DBNull.Value ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));
于 2012-04-17T17:41:00.470 に答える