3

null を許可し、デフォルト値が 0 の「faxno」という列があるテーブル アドレスがあります。

なぜこれが起こっているのか理解できませんでしたか?

Null の代わりにデフォルト値を挿入する可能性はありますか?

4

4 に答える 4

3

挿入ステートメントで、列を除外faxnoします。

null 許容列の場合、挿入が発生するとデフォルト値が使用され、列名がステートメントから除外されます。 null 値を挿入するには、列をリストに含め、null の値を明示的に挿入する必要があります。

参照

于 2013-01-17T09:40:08.877 に答える
1

値が明示的に指定されていない場合にのみ、デフォルト値が挿入されます。

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値がデータベースに送信され、デフォルトを無視してデータベースに挿入されます。

于 2013-01-17T09:47:37.160 に答える
1

に行を追加する場合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です。

于 2013-01-17T09:37:50.300 に答える