Невозможно вставить дату и время как нулевые значения в базу данных Nexus из кода C# dapper
Проблема с приведением ниже при вставке значения DateTime как нулевого значения в Nexus Db с использованием класса dapper в базе данных nexus.
public const string SqlQuery = @"INSERT INTO Test(test1, test2, test3,
Date1,Date2))
Values(?test1?,?
test2?,?date1?,?date2?)";
public void InsertTest(string test1,string test2, DateTime? date1,DateTime?
date2)
{
var params= new DynamicParameters(
new
{
test1= "",
test2 ="",
Date1 = cDate.HasValue ? cDate.Value.Date : (DateTime?)null,
Date2 = cDate1.HasValue ? cDate2.Value.Date : (DateTime?)null,
}
ExecConn(SqlQuery , params);
}
ОШИБКА [HY000] Запрос вернул ошибку (состояние ODBC: HY000)
Ошибка: неверный аргумент к дате кодирует
Запрос: t 60000; INSERT INTO Test(test1, test2, test3, Date1,Date2) Значения (:Param1,:Param2,:Param3,:Param4,:Param5)
2 ответа
Попробуйте использовать DateTime.MinValue вместо (DateTime?) Null
public void InsertTest(string test1,string test2, DateTime? date1,DateTime?
date2)
{
var params= new DynamicParameters(
new
{enter code here
test1= "",
test2 ="",`enter code here`
Date1 = cDate.HasValue ? cDate.Value.Date : DateTime.MinValue.Date,
Date2 = cDate1.HasValue ? cDate2.Value.Date : DateTime.MinValue.Date,
}
ExecConn(SqlQuery , params);
}
Обычно на уровне базы данных (для оракула и MSSQL) мы должны сделать что-то вроде этого
(PS это взято из моего кода, где я также должен был учесть тот факт, что некоторые полуобращенные вводят такие вещи, как 31/2/2018 в Excel!)
Это превращает его в DBNull.Value, если фактически ноль или недействительный. Который должен тогда работать.
private object dtfix(object o)
{
if (!(o is DateTime))
{
return null;
}
else
{
try
{
DateTime x = (DateTime)o;
x.AddDays(1);
}
catch
{
return null;
}
return o;
}
}
param = new SqlParameter("duedate", SqlDbType.Date);
param.Value = dtfix(myparm) ?? DBNull.Value;