The default value is inserted if and only if a value is not specified explicitly.
If I have a table Articles (ID int not null, Title nvarchar(50) null) with a default value of "Untitled" for the Title column, and I do:
Insert into Articles (ID) values (1)
it will insert the row (1, 'Untitled'). But if I do
Insert into Articles (ID, Title) values (2, null)
it will insert the row (2, null) because I explicitly requested that a null value (which is valid according to the column definition) be inserted in the Title column.
When you use a DataSet with a DataTable, if has to fill all the fields of the row with something, regardless of the default settings, and then saves all the fields when the DataTable is saved. If a value of the field has a value of the C# null object (null) than the DataSet treats that field as uninitialized, and does not set that field in the generated insert/update statements (that means that your default will be applied).
However, if the value of the field is Convert.DBNull (the SQL null value) than an explicit null value is sent to the database and it's inserted as such in the database, ignoring the defaults.
faxnowhich allowsnulls? Do you mean a column instead? Apart from that, you show us more(database schema, code).nullandDBNull.Valuewhen using a data-set...INSERT (Column) VALUES (NULL)(as an example), thenNULLwill be inserted. You only get the default if the column is omitted from the column list or you specifyDEFAULTinstead ofNULL. I suspect that (underneath the covers), you're getting anINSERTwhich includes the column.INSERTquery is being generated. It may not be visible in your code, but it's happening.