Hi. I have column SomeId in table SomeLink. When I look with tOra or Sql Plus Worksheet both state:
tOra:
Column name Data type Default Null Comment SOMEID INTEGER {null} NOT NULL {null}
Sql Plus:
SOMEID NOT NULL NUMBER(38)
I have authored a method that's intended to give default values to all NOT NULL fields that don't have values:
public static void GetDefaultValuesForNonNullColumns(DataRow row)
{
foreach(DataColumn col in row.Table.Columns)
{
if (Convert.IsDBNull(row[col]) && !col.AllowDBNull)
{
if (ColumnIsNumeric(col.DataType))
row[col] = 0;
else if (col.DataType == typeof(DateTime))
row[col] = DateTime.Now;
else if (col.DataType == typeof(String))
row[col] = string.Empty;
else if (col.DataType == typeof(Char))
row[col] = ' ';
else
throw new Exception(string.Format("Unsupported column type: {0}", col.DataType));
}
}
}
When SOMEID is handled in loop the AllowDBNull = true.
I really can't understand. The table is created in DataSet like this:
_someLinkAdptr = _dbFactory.CreateDataAdapter();
_someLinkAdptr.SelectCommand = _dbFactory.CreateCommand();
_someLinkAdptr.SelectCommand.Connection = _cnctn;
_someLinkAdptr.SelectCommand.CommandText = GetSomeLinkSelectTxtAndParams(_someLinkAdptr.SelectCommand,
UndefinedValue.ToString(), UndefinedValue.ToString());
Select command returns no rows. The idea is that I can then use commandbuilder to get InsertCommand without building it myself. The row is added to dataset's table like this:
private static void CreateDocLink(int anId, int anotherId)
{
DataRow row = _someDataSet.Tables["SomeLink"].NewRow();
row["AnId"] = anId;
row["AnotherId"] = anotherId;
Utility.GetDefaultValuesForNonNullColumns(row);
_someDataSet.Tables["SomeLink"].Rows.Add(row);
}
When DataAdapter is updated to oracle db I get:
ORA-01400: cannot insert NULL into (SOMESCHEMA.SOMELINK.SOMEID)
Cheers & BR -Matti