Thanks much. It worked. Below is the wrapper class for everybody else.
You use it like this:
comm.Parameters.Add("TrainTable", new WorkAroundDataReader(trainTable));
//-------------------------class-----------------------
class WorkAroundDataReader : IDataReader
{
private DataTableReader rdr;
public WorkAroundDataReader(DataTable t)
{
rdr = t.CreateDataReader();
}
#region IDataReader Members
public void Close()
{
rdr.Close();
}
public int Depth
{
get {
return rdr.Depth;
}
}
public DataTable GetSchemaTable()
{
return rdr.GetSchemaTable();
}
public bool IsClosed
{
get { return rdr.IsClosed; }
}
public bool NextResult()
{
return rdr.NextResult();
}
public bool Read()
{
return rdr.Read();
}
public int RecordsAffected
{
get { return rdr.RecordsAffected; }
}
#endregion
#region IDisposable Members
public void Dispose()
{
rdr.Dispose();
}
#endregion
#region IDataRecord Members
public int FieldCount
{
get { return rdr.FieldCount; }
}
public bool GetBoolean(int i)
{
return rdr.GetBoolean(i);
}
public byte GetByte(int i)
{
return rdr.GetByte(i);
}
public long GetBytes(int i, long fieldOffset, byte[] buffer, int
bufferoffset, int length)
{
return rdr.GetBytes(i, fieldOffset, buffer, bufferoffset, length);
}
public char GetChar(int i)
{
return rdr.GetChar(i);
}
public long GetChars(int i, long fieldoffset, char[] buffer, int
bufferoffset, int length)
{
return rdr.GetChars(i, fieldoffset, buffer, bufferoffset, length);
}
public IDataReader GetData(int i)
{
return rdr.GetData(i);
}
public string GetDataTypeName(int i)
{
return rdr.GetDataTypeName(i);
}
public DateTime GetDateTime(int i)
{
return rdr.GetDateTime(i);
}
public decimal GetDecimal(int i)
{
return rdr.GetDecimal(i);
}
public double GetDouble(int i)
{
return rdr.GetDouble(i);
}
public Type GetFieldType(int i)
{
return rdr.GetFieldType(i);
}
public float GetFloat(int i)
{
return rdr.GetFloat(i);
}
public Guid GetGuid(int i)
{
return rdr.GetGuid(i);
}
public short GetInt16(int i)
{
return rdr.GetInt16(i);
}
public int GetInt32(int i)
{
return rdr.GetInt32(i);
}
public long GetInt64(int i)
{
return rdr.GetInt64(i);
}
public string GetName(int i)
{
return rdr.GetName(i);
}
public int GetOrdinal(string name)
{
return rdr.GetOrdinal(name);
}
public string GetString(int i)
{
return rdr.GetString(i);
}
public object GetValue(int i)
{
//HERE IS THE FIX
if (rdr.IsDBNull(i)) return null;
return rdr.GetValue(i);
}
public int GetValues(object[] values)
{
return rdr.GetValues(values);
}
public bool IsDBNull(int i)
{
return rdr.IsDBNull(i);
}
public object this[string name]
{
get { return rdr[name]; }
}
public object this[int i]
{
get { return rdr[i]; }
}
#endregion
}
>> Stay informed about: Problem passing DBNulls in a DataTable parameter of AdomdC..