У меня есть процедура в моей SQL серверной базе данных, которая возвращает некоторые даты в наборе записей, столбец, в котором я получаю даты, имеет тип данных varchar
. Я использую LINQ2 SQL для выполнения процедуры.
Проблема в том, что, когда я выполняю процедуру в SSMS, она выполняется безо всякой ошибки, но когда я выполняю ее через свое приложение, она дает
преобразование Тип данных varchar с типом данных datetime привел к ошибке вне диапазона
. Я также проверил, что класс, который был сгенерирован компоновщиком классов LINQ2 SQL для набора записей этой процедуры, также не содержит никакого свойства, имеющего тип данных datetime
.
Процедура слишком длинная для совместного использования, но я делюсь последним SELECT процедуры, который обнаружен конструктором класса LINQ2 SQL для генерации класса. Вот оно
DECLARE @finalResultSetTempTable AS TABLE (
cd_id BIGINT NOT NULL ,
service_id INT NULL ,
resident_id VARCHAR(20) ,
cd_Date VARCHAR(20) ,
cd_StartTime VARCHAR(20) ,
cd_EndTime VARCHAR(20) ,
Pre_travelTime VARCHAR(20) ,
Post_travelTime VARCHAR(20) ,
cd_TimeDuration VARCHAR(20) ,
UnitType INT ,
NoOfUnits INT ,
cd_IsCompleted BIT ,
AssignedTo INT ,
cd_status VARCHAR(50) ,
Service_name VARCHAR(200) ,
Application_Name VARCHAR(50) ,
emp_first_name VARCHAR(200) ,
emp_last_name VARCHAR(200) ,
resident_first_name VARCHAR(200) ,
resident_last_name VARCHAR(200) ,
address VARCHAR(200) ,
suburb VARCHAR(200) ,
state VARCHAR(200) ,
postCode VARCHAR(200)
);
SELECT cd_id , service_id , resident_id , FORMAT(CAST(cd_Date AS DATETIME) , 'yyyy-MM-dd') AS cd_Date , ISNULL(cd_StartTime , '12:00 AM') AS cd_StartTime , ISNULL(cd_EndTime , '12:00 AM') AS cd_EndTime , Pre_travelTime , Post_travelTime , ISNULL(cd_TimeDuration , '0') AS cd_TimeDuration , UnitType , NoOfUnits , cd_IsCompleted , AssignedTo , cd_status , Service_name , emp_first_name , emp_last_name , resident_first_name , resident_last_name , address , suburb , state , postCode , Application_Name
FROM @finalResultSetTempTable
Класс, сгенерированный LINQ2 SQL, выглядит следующим образом
public partial class sp_GetServicesForBulkUpdateResult
{
private long _cd_id;
private System.Nullable<int> _service_id;
private string _resident_id;
private string _cd_Date;
private string _cd_StartTime;
private string _cd_EndTime;
private string _Pre_travelTime;
private string _Post_travelTime;
private string _cd_TimeDuration;
private System.Nullable<int> _UnitType;
private System.Nullable<int> _NoOfUnits;
private System.Nullable<bool> _cd_IsCompleted;
private System.Nullable<int> _AssignedTo;
private string _cd_status;
private string _Service_name;
private string _emp_first_name;
private string _emp_last_name;
private string _resident_first_name;
private string _resident_last_name;
private string _address;
private string _suburb;
private string _state;
private string _postCode;
private string _Application_Name;
public sp_GetServicesForBulkUpdateResult()
{
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_cd_id", DbType="BigInt NOT NULL")]
public long cd_id
{
get
{
return this._cd_id;
}
set
{
if ((this._cd_id != value))
{
this._cd_id = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_service_id", DbType="Int")]
public System.Nullable<int> service_id
{
get
{
return this._service_id;
}
set
{
if ((this._service_id != value))
{
this._service_id = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_resident_id", DbType="VarChar(20)")]
public string resident_id
{
get
{
return this._resident_id;
}
set
{
if ((this._resident_id != value))
{
this._resident_id = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_cd_Date", DbType="NVarChar(4000)")]
public string cd_Date
{
get
{
return this._cd_Date;
}
set
{
if ((this._cd_Date != value))
{
this._cd_Date = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_cd_StartTime", DbType="VarChar(20) NOT NULL", CanBeNull=false)]
public string cd_StartTime
{
get
{
return this._cd_StartTime;
}
set
{
if ((this._cd_StartTime != value))
{
this._cd_StartTime = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_cd_EndTime", DbType="VarChar(20) NOT NULL", CanBeNull=false)]
public string cd_EndTime
{
get
{
return this._cd_EndTime;
}
set
{
if ((this._cd_EndTime != value))
{
this._cd_EndTime = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Pre_travelTime", DbType="VarChar(20)")]
public string Pre_travelTime
{
get
{
return this._Pre_travelTime;
}
set
{
if ((this._Pre_travelTime != value))
{
this._Pre_travelTime = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Post_travelTime", DbType="VarChar(20)")]
public string Post_travelTime
{
get
{
return this._Post_travelTime;
}
set
{
if ((this._Post_travelTime != value))
{
this._Post_travelTime = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_cd_TimeDuration", DbType="VarChar(20) NOT NULL", CanBeNull=false)]
public string cd_TimeDuration
{
get
{
return this._cd_TimeDuration;
}
set
{
if ((this._cd_TimeDuration != value))
{
this._cd_TimeDuration = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UnitType", DbType="Int")]
public System.Nullable<int> UnitType
{
get
{
return this._UnitType;
}
set
{
if ((this._UnitType != value))
{
this._UnitType = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NoOfUnits", DbType="Int")]
public System.Nullable<int> NoOfUnits
{
get
{
return this._NoOfUnits;
}
set
{
if ((this._NoOfUnits != value))
{
this._NoOfUnits = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_cd_IsCompleted", DbType="Bit")]
public System.Nullable<bool> cd_IsCompleted
{
get
{
return this._cd_IsCompleted;
}
set
{
if ((this._cd_IsCompleted != value))
{
this._cd_IsCompleted = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AssignedTo", DbType="Int")]
public System.Nullable<int> AssignedTo
{
get
{
return this._AssignedTo;
}
set
{
if ((this._AssignedTo != value))
{
this._AssignedTo = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_cd_status", DbType="VarChar(50)")]
public string cd_status
{
get
{
return this._cd_status;
}
set
{
if ((this._cd_status != value))
{
this._cd_status = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Service_name", DbType="VarChar(200)")]
public string Service_name
{
get
{
return this._Service_name;
}
set
{
if ((this._Service_name != value))
{
this._Service_name = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_emp_first_name", DbType="VarChar(200)")]
public string emp_first_name
{
get
{
return this._emp_first_name;
}
set
{
if ((this._emp_first_name != value))
{
this._emp_first_name = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_emp_last_name", DbType="VarChar(200)")]
public string emp_last_name
{
get
{
return this._emp_last_name;
}
set
{
if ((this._emp_last_name != value))
{
this._emp_last_name = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_resident_first_name", DbType="VarChar(200)")]
public string resident_first_name
{
get
{
return this._resident_first_name;
}
set
{
if ((this._resident_first_name != value))
{
this._resident_first_name = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_resident_last_name", DbType="VarChar(200)")]
public string resident_last_name
{
get
{
return this._resident_last_name;
}
set
{
if ((this._resident_last_name != value))
{
this._resident_last_name = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_address", DbType="VarChar(200)")]
public string address
{
get
{
return this._address;
}
set
{
if ((this._address != value))
{
this._address = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_suburb", DbType="VarChar(200)")]
public string suburb
{
get
{
return this._suburb;
}
set
{
if ((this._suburb != value))
{
this._suburb = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_state", DbType="VarChar(200)")]
public string state
{
get
{
return this._state;
}
set
{
if ((this._state != value))
{
this._state = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_postCode", DbType="VarChar(200)")]
public string postCode
{
get
{
return this._postCode;
}
set
{
if ((this._postCode != value))
{
this._postCode = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Application_Name", DbType="VarChar(50)")]
public string Application_Name
{
get
{
return this._Application_Name;
}
set
{
if ((this._Application_Name != value))
{
this._Application_Name = value;
}
}
}
}
Код, который я написал для выполнения процедуры, показан ниже
Service service;
res = new List<Service>();
var resultSet = context.sp_GetServicesForBulkUpdate(assignedTo, _fromDate, _toDate, programName, serviceID.ToString(), "ALL");
foreach (var item in resultSet)
{
service = new Service();
service.serviceDeliveryID = item.cd_id.ToString();
service.serviceID = item.service_id.ToString();
service.serviceStatus = item.cd_status;
service.serviceName = item.Service_name;
service.serviceStartDate = string.IsNullOrEmpty(item.cd_Date) ? "" : item.cd_Date;
service.serviceStartTime = item.cd_StartTime;
service.serviceEndDate = string.IsNullOrEmpty(item.cd_Date) ? "" : item.cd_Date;
service.serviceEndTime = item.cd_EndTime;
service.serviceLocation = ((string.IsNullOrEmpty(item.address) ? "" : item.address + ", ") + (string.IsNullOrEmpty(item.suburb) ? "" : item.suburb + ", ") + (string.IsNullOrEmpty(item.state) ? "" : item.state + ", ") + (string.IsNullOrEmpty(item.postCode) ? "" : item.postCode + " ")).Trim().TrimEnd(',');
service.serviceUnitType = item.UnitType;
service.serviceNoOfUnits = item.NoOfUnits;
service.employeeID = Int32.Parse((item.AssignedTo.HasValue ? item.AssignedTo.ToString() : "0"));
service.employeeFirstName = string.IsNullOrEmpty(item.emp_first_name) ? "" : item.emp_first_name;
service.employeeLastName = string.IsNullOrEmpty(item.emp_last_name) ? "" : item.emp_last_name;
service.residentID = item.resident_id;
service.residentFirstName = item.resident_first_name;
service.residentLastName = item.resident_last_name;
service.isAssigned = (item.AssignedTo.HasValue && item.AssignedTo != 0) ? true : false;
service.isActive = item.cd_IsCompleted.ToString() == "0" ? false : true;
service.serviceAppName = item.Application_Name;
res.Add(service);
}
Вот некоторые примеры данных, возвращаемых процедурой, если они могут быть полезны
Может ли кто-нибудь оказать какую-либо помощь?
РЕДАКТИРОВАТЬ
Формат даты на прикрепленном снимке экрана m/dd/yyyy
из-за листа Excel. Фактический формат yyyy-mm-dd