質問: TypeDescriptor.GetConverter(info); return foo.ConvertFromInvariantString(value); } ``` 利点: * 回避できないデフォルト値の回避策 * 検証メッセージをクリアする(最大長など) * ケースの列名の大文字と小文字を区別 短所 * デフォルト値の文字列を解析する * SQL側のデフォルト値(sprocsなど)を解決できません
回答: > IDataReaderからDEFAULTキーワードをSqlBulkCopyに渡す方法はありますか? > > 残念だけど違う。 :-(カラムが`NOT NULL`なく、バルク挿入がそれにマップされている場合、各ローはそのカラムの値を持たなければなりません。 背景:TDSレベルでは、バルク・インサートは、 *外部ツールのみの*構文を使用して記述されたSQL `INSERT`ステートメントを送信し、次に列メタデータ、行データを含むTDS構造を送信することによって行われます。これらのどれも、「 `NULL`値が非`NULL`な列にある場合、 `NULL`を`DEFAULT`として扱う」と言う方法を提供していません。 > このようなシナリオで人々は何を使用しますか? > > ハム...組み込みのシンプルなソリューションが必要なような気がしたら、イライラしています。 : - /あなたの状況についてもっと知ることなく、どのオプションを推奨するのかを知るのは難しいです。 1つの追加オプション:プレースホルダ値のアプローチ。挿入する前に、 "デフォルトにする必要がある`NULL` "をプレースホルダ値に置き換えます。次に、挿入後、プレースホルダをデータベース生成のデフォルト値(たとえば、 `UPDATE ... SET Col1 = DEFAULT WHERE Col1 = *placeholder*` )で置き換えるための更新を実行します。アプリケーションでは、ヌル値を持たないどの列がデフォルト値を持っているかを知る必要がありますが、デフォルト値の計算方法を知る必要はありません。それはいわゆるマジックナンバーを使用しているので気にしませんが、それはオプションです。