#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.