Reputation: 335
I need to define a System.Data.DataTable
in C# VS2013; in one column, it may be int or null.
But I got:
DataSet does not support System.Nullable<>.
For the definition:
public DataTable myDataTable
myDataTable = new DataTable("myName");
myDataTable.Columns.Add("ID", typeof(Int32));
myDataTable.Columns.Add("value1", typeof(Int32?)); // run time error
myDataTable.Columns.Add("value2", typeof(Int32?));
Any ideas? Work around?
After making the column nullable,
DataColumn dc = myDataTable.Columns.Add("value1", typeof(Int32));
dc.AllowDBNull = true;
When I queried it, I got
Sequence contains no elements.
Please see the UPDATE.
UPDATE
int? result = (from r in myDataTable.AsEnumerable()
where r.Field<Int32>("ID") == givenID
&& r.Field<Int32?>("value1") == givenValue1
select r.Field<Int32>("value2")).First();
Upvotes: 17
Views: 31555
Reputation: 188
or to make it even shorter one line:
table.Columns.Add(new DataColumn("ID", typeof(Int32)) { AllowDBNull = true });
and:
row["ID"] = (object) nullableId ?? DBNull.Value;
Upvotes: 2
Reputation: 387
TRY
public DataTable myDataTable
myDataTable = new DataTable("myName");
myDataTable.Columns.Add("ID", typeof(Int32));
myDataTable.Columns.Add(new DataColumn { ColumnName = "VALUE1", DataType = typeof(int), AllowDBNull = true });
myDataTable.Columns.Add(new DataColumn { ColumnName = "VALUE2", DataType = typeof(int), AllowDBNull = true });
this will make value columns nullable
and at time of insert
DataRow dr = myDataTable.NewRow();
dr["VALUE1"] = object.value1==null? (object)DBNull.Value : object.value1;
This will do what is required
Upvotes: 10
Reputation: 216363
It is a property of the DataColumn
public DataTable myDataTable
myDataTable = new DataTable("myName");
myDataTable.Columns.Add("ID", typeof(Int32));
DataColumn dc = myDataTable.Columns.Add("value1", typeof(Int32));
dc.AllowDBNull = true;
Upvotes: 22