I am trying to invoke a sql stored procedure from C#. I have the following code to create the DataColumn. But getting error while createing a DataTable when adding nullable Guid and DateTime type.
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]
{
new DataColumn(nameof(LearnerEntity.FirstName), typeof(string)),
new DataColumn(nameof(LearnerEntity.DateOfBirth), typeof(DateTime?)),
new DataColumn(nameof(LearnerEmployerEntity.SectorId), typeof(Guid?)),
new DataColumn(nameof(LearnerEntity.EPortfolioId), typeof(int?))
});
dt.Rows.Add(
learnerEntity.FirstName,
learnerEntity.DateOfBirth ?? SqlDateTime.Null,
learnerEntity.Employer?.SectorId ?? SqlGuid.Null.Value,
learnerEntity.EPortfolioId ?? SqlInt32.Null.Value);
The error is:
DataSet does not support System.Nullable<>.
Can anyone help me what i am doing wrong here?
I am trying the following:
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]
{
new DataColumn(nameof(LearnerEntity.FirstName), typeof(string)),
new DataColumn(nameof(LearnerEntity.DateOfBirth), Nullable.GetUnderlyingType(typeof(LearnerEmployerEntity).GetProperty("DateOfBirth").PropertyType)),
new DataColumn(nameof(LearnerEmployerEntity.SectorId), Nullable.GetUnderlyingType(typeof(LearnerEmployerEntity).GetProperty("SectorId").PropertyType)),
new DataColumn(nameof(LearnerEntity.EPortfolioId), Nullable.GetUnderlyingType(typeof(LearnerEmployerEntity).GetProperty("EPortfolioId").PropertyType))
});
dt.Rows.Add(
learnerEntity.FirstName,
learnerEntity.DateOfBirth ?? SqlDateTime.Null,
learnerEntity.Employer?.SectorId ?? SqlGuid.Null.Value,
learnerEntity.EPortfolioId ?? SqlInt32.Null.Value);
Thanks
typeof(Guid?)andtypeof(DateTime?). By default columns are already nullable. Usetypeof(Guid),typeof(DateTime)andtypeof(int)insteadDBNull.Valueor justnull. A DataTable has .NET types like string, int, DateTime, Guid, not povider-specific types