null を許可し、デフォルト値が 0 の「faxno」という列があるテーブル アドレスがあります。
なぜこれが起こっているのか理解できませんでしたか?
Null の代わりにデフォルト値を挿入する可能性はありますか?
null を許可し、デフォルト値が 0 の「faxno」という列があるテーブル アドレスがあります。
なぜこれが起こっているのか理解できませんでしたか?
Null の代わりにデフォルト値を挿入する可能性はありますか?
挿入ステートメントで、列を除外faxno
します。
null 許容列の場合、挿入が発生するとデフォルト値が使用され、列名がステートメントから除外されます。 null 値を挿入するには、列をリストに含め、null の値を明示的に挿入する必要があります。
値が明示的に指定されていない場合にのみ、デフォルト値が挿入されます。
列Articles (ID int not null, Title nvarchar(50) null)
のデフォルト値が「無題」のテーブルがある場合、次のようにします。Title
Insert into Articles (ID) values (1)
行が挿入され(1, 'Untitled')
ます。でももしそうなら
Insert into Articles (ID, Title) values (2, null)
(2, null)
NULL 値 (列定義によれば有効) を列に挿入することを明示的に要求したため、行が挿入されTitle
ます。
DataTable で DataSet を使用する場合、既定の設定に関係なく、行のすべてのフィールドに何かを入力する必要があり、DataTable が保存されるときにすべてのフィールドが保存されます。フィールドの値に C# null オブジェクト ( null
) の値がある場合、DataSet はそのフィールドを初期化されていないものとして扱い、生成された挿入/更新ステートメントでそのフィールドを設定しません (つまり、デフォルトが適用されます)。
ただし、フィールドの値がConvert.DBNull
(SQL null 値) の場合は、明示的なnull
値がデータベースに送信され、デフォルトを無視してデータベースに挿入されます。
に行を追加する場合DataTable
、値の指定方法によって異なります。を指定するnull
と、「デフォルトを適用」と解釈されます。を指定するDBNull.Value
と、「これは明示的に null です」と解釈します。そう: 渡すnull
:
DataTable dt = new DataTable();
dt.Columns.Add("foo", typeof(int)).DefaultValue = 0;
Console.WriteLine(dt.Rows.Add(new object[]{null})["foo"]);
Console.WriteLine(dt.Rows.Add(new object[]{DBNull.Value})["foo"]);
最初の行は「0」を示しています - デフォルトが適用されています。2 行目は空です。明示的にnullです。