Невозможно вставить дату и время как нулевые значения в базу данных Nexus из кода # # dapper - PullRequest
0 голосов
/ 04 июня 2018

Проблема с приведением ниже при вставке значения 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);
}

ERROR [HY000] Запрос вернул ошибку (состояние ODBC: HY000)

Ошибка: неверный аргумент в кодировке даты

Запрос: t 60000;INSERT INTO Test (test1, test2, test3, Date1, Date2) Значения (: Param1,: Param2,: Param3,: Param4,: Param5)

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Попробуйте использовать 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);
 }
0 голосов
/ 04 июня 2018

Обычно на уровне базы данных (для оракула и MSSQL) мы должны сделать что-то вроде этого

(PS это взято из моего кода, где я также должен был учесть тот факт, что некоторые halfwit типы типа, такие как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;
...