テーブルAからテーブルBにデータをコピーしています。テーブルBには、デフォルトの制約値が0のnull許容列があります。通常、次のアクセサーを使用して列の値を設定します。
public object this[string columnName]
{
get { return DataTable.Rows[CurrentRow][columnName]; }
set { DataTable.Rows[CurrentRow][columnName] = value; }
}
ただし、 null許容列Xは設定しません。
行全体を挿入すると、デフォルト値は使用されません。0の代わりに、NULL可能列にNULLが挿入されました。
_sqlCommandBuilder = new SqlCommandBuilder(_sqlDataAdapter);
_sqlCommandBuilder.ConflictOption = ConflictOption.OverwriteChanges;
_sqlCommandBuilder.SetAllValues = false;
_sqlDataAdapter.Update(DataTable);
スキーマも取得します。
_sqlDataAdapter.Fill(DataTable);
_sqlDataAdapter.FillSchema(_dataTable, SchemaType.Mapped);
設定しなかったのに、ADO.NETが列XにNULLを設定するのはなぜですか?
列Xの値を設定しない場合、ADO.NETは指定された制約からデフォルト値を取得すると思いました。
ADO.NET CommandBuilderはデフォルトの制約を使用できますか?