[ACCEPTED]-Dataset allowing Null values even when AllowDBNull = False?-strongly-typed-dataset
The short answer is:
System.DBNull.Value != null
The longer answer is:
In C#, the concept of a NULL
value in SQL is 13 represented by the Value
property of the System.DBNull
class. When 12 dealing with a database, the more familiar 11 C# null
doesn't actually mean "null value."
When 10 you set a database column to null
, ADO.NET will 9 initialize the column to whatever the default 8 value is for that column (for example, an 7 int
column would be initialized to 0). That 6 is, using null
can actually cause a non-null 5 value to end up in the database, and therefore 4 you won't get an error.
If you instead set 3 a database column to System.DBNull.Value
, the column will actually 2 be set to NULL
. This is the situation that AllowDBNulls == false
will 1 prevent you from doing.
Regarding your "bonus" ;-) question: NULL 9 (no string) and "" (empty string) are two 8 different things. So it's perfectly reasonable 7 to treat them differently. It's the distinction 6 between null and DBNull that is messing 5 things up. If nullable types had been available 4 at the time of designing ADO.NET, things 3 probably would be a lot easier. But before 2 .NET 2.0, there was no way to represent 1 e.g. a "null integer".
Are you exactly assigning NULL values or 13 an empty string to those columns? If you 12 don't assign any value to a column, it will 11 default to NULL (if a DEFAULT constraint 10 is not imposed). Else you can assign a NULL 9 value by doing -
ds.Tables[0].Rows[0]["Col"] = null;
If you are assigning an 8 Empty string to those columns, it's not 7 equal to NULL.
And if you have a NULL value 6 in a column which has been marked as NOT 5 NULLABLE, it will throw an error -
Column 4 'Col1' does not allow nulls.
EDIT:
By NOT 3 NULLABLE, I mean AllowDBNull = false.
Your 2 code seems correct. Can you try trimming 1 the text?
Here's the whole code -
DataTable dt = new DataTable();
DataColumn column = new DataColumn("Col1");
column.AllowDBNull = false;
dt.Columns.Add(column);
DataRow dr = dt.NewRow();
dr["Col1"] = null;
dt.Rows.Add(dr);
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.