Это, кажется, работает для меня, но мне было интересно, есть ли какие-либо проблемы с ним
class Test
{
public int PKId { get; set; }
public string RequiredString { get; set; }
public int RequiredInt { get; set; }
public decimal RequiredMoney { get; set; }
public bool RequiredBool { get; set; }
public DateTime RequiredDate { get; set; }
public string NullableString { get; set; }
public int? NullableInt { get; set; }
public decimal? NullableMoney { get; set; }
public bool? NullableBool { get; set; }
public DateTime? NullableDate { get; set; }
}
TestDatabase соответствует классу в отношении нулей.
static internal T NullConvertFromDB<T>(object value)
{
if (value.Equals(DBNull.Value))
{
return default(T);
}
else
{
return (T)value;
}
}
static internal object NullConvertToDB<T>(object value)
{
if (value == null)
return System.DBNull.Value;
else
return (T)value;
}
При получении данных я использую
Test test = new Test();
test.PKId = dr.GetInt32(0);
test.RequiredString = dr.GetString(1);
test.RequiredInt = dr.GetInt32(2);
test.RequiredMoney = (decimal)dr.GetSqlMoney(3);
test.RequiredBool = dr.GetBoolean(4);
test.RequiredDate = dr.GetDateTime(5);
test.NullableString = NullConvertFromDB<string>(dr[6]);
test.NullableInt = NullConvertFromDB<int?>(dr[7]);
test.NullableMoney = NullConvertFromDB<decimal?>(dr[8]);
test.NullableBool = NullConvertFromDB<bool?>(dr[9]);
test.NullableDate = NullConvertFromDB<DateTime?>(dr[10]);
И вставляя я использую
cmd.Parameters.AddWithValue("@RequiredString", test.RequiredString);
cmd.Parameters.AddWithValue("@RequiredInt", test.RequiredInt);
cmd.Parameters.AddWithValue("@RequiredMoney", test.RequiredMoney);
cmd.Parameters.AddWithValue("@RequiredBool", test.RequiredBool);
cmd.Parameters.AddWithValue("@RequiredDate", test.RequiredDate);
cmd.Parameters.AddWithValue("@NullableString", NullConvertToDB<string>(test.NullableString));
cmd.Parameters.AddWithValue("@NullableInt", NullConvertToDB<int?>(test.NullableInt));
cmd.Parameters.AddWithValue("@NullableMoney", NullConvertToDB<decimal?>(test.NullableMoney));
cmd.Parameters.AddWithValue("@NullableBool", NullConvertToDB<bool?>(test.NullableBool));
cmd.Parameters.AddWithValue("@NullableDate", NullConvertToDB<DateTime?>(test.NullableDate));
Это прекрасно работает, но мне было интересно, есть ли что-то, о чем я должен знать, прежде чем внедрять в свой DAL.
Привет
_Eric