ASP.NET Переполнение даты адаптера таблицы при обновлении

#c# #asp.net #sql-server

#c# #asp.net #sql-сервер

Вопрос:

Я создаю интерфейс для базы данных образцов AdventureWorks.

Я пытаюсь обновить строку в HumanResources.Отдел.

Я использую набор данных с табличным адаптером для этой таблицы.

Вставка и обновление строки вызывает проблемы :

  public Department InserDepartment(Department department) 
 {
    try 
    {
       department.ModifiedDate = DateTime.Now;
       Int32 id = departmentTableAdapter.Insert(department.Name, department.GroupName, department.ModifiedDate);   
       return new Department();
     }
     catch (Exception ex) 
     {
        return new Department();
     }
 }
 
 public Department UpdateDepratment(Department department) 
{
   try
   {
      HumanResourcesDataSet.DepartmentDataTable tblDepartments = departmentTableAdapter.GetDataByDepartmentId(department.DepartmentID);
      HumanResourcesDataSet.DepartmentRow departmentRow = tblDepartments[0];
      departmentRow.Name = department.Name;
      department.GroupName = department.GroupName;
      department.ModifiedDate = DateTime.Now;
      departmentTableAdapter.Update(tblDepartments);
      department = GetDepartment(department.DepartmentID);
      return department;
   }
   catch (Exception ex)
   {
       // TBD
   }
}
 

Возникает следующее исключение:

Дробная часть предоставленного значения времени превышает масштаб соответствующего параметра или столбца SQL Server. Увеличьте bScale в DBPARAMBINDINFO или column scale, чтобы исправить эту ошибку.

Проблема вызвана следующей строкой в моем методе обновления:

 department.ModifiedDate = DateTime.Now;
 

Набор данных принимает класс DateTime для этого столбца, определение базы данных — это datetime, а не null.

Я реализовал столбцы datetime в других базах данных, и у меня никогда не было этой проблемы.

Что я упускаю из виду, что вызывает проблему?
Где мне следует искать решение этой проблемы?

Комментарии:

1. Что такое тип ModifiedDate данных ?

2. @Larnu это дата-время в C # и дата-время в SQL

3. Что означает DateTime. Теперь возвращаемся, форматируем?

4. @Cedersved что-то вроде этого 29/12/2020 14:46:44

5. Попробуйте это с помощью: DateTime.Now.toString(«гггг-ММ-дд ЧЧ: мм: сс»)

Ответ №1:

Итак, я не совсем нашел причину и правильное решение этой проблемы. Я добавил новую хранимую процедуру для обновления рассматриваемой таблицы, которая, по-видимому, решает некоторые проблемы. Проблема где-то в моем поставщике данных (System.Data.OleDb) и мой SQL server.

Сервер является SQL — Express. Я импортировал базу данных из файла .bak.

В хранимой процедуре я устанавливаю ModifiedDate = CURRENT_TIMESTAMP и передаю другие значения в качестве параметра.

Я предполагаю, что мое обновление помешало выполнению SQL-скрипта

[Дата изменения] [дата-время] НЕ НУЛЕВОЕ ОГРАНИЧЕНИЕ [DF_Department_ModifiedDate] ПО УМОЛЧАНИЮ (GETDATE())

Я действительно не хочу возиться со структурой базы данных и изменять значение по умолчанию, поскольку я пока не очень хорошо разбираюсь в базе данных.

Я также не могу игнорировать столбец, поскольку я могу обновить только целую строку с помощью моего адаптера таблицы, которая включает дату, установленную в моем экземпляре DataRow.