来自' System.String'的无效演员表到' System.TimeSpan'

时间:2016-12-22 11:33:26

标签: c# sql asp.net datetime casting

您好我正在使用此存储过程从不同的表中获取数据 这是存储过程

DECLARE @default time='16:43:22.560'
  SELECT
  ev.Id,
  ev.Title,
  ev.PageUrl,
  ev.FromDate,
  ev.ToDate,
  ev.Isactive,
 CONVERT(char(10), ISNULL(eventtime,@default), 108) as EventTime,  
  ev.UserType,
  ev.Street,
  ev.Image,
  ev.Description,
  ev.City,
  ev.CountryCode,
  ev.CategoryId,
  ev.UserId,
  ev.StateCode,
  cm.Name as 'CountryName',
  sm.name as 'StateName',
  asp.FirstName as 'FirstName',
  Cat.Name as 'CategoryName',
  ev.ZipCode
 from events ev
 inner join countrymaster cm on ev.CountryCode=cm.Id
 inner join statemaster sm on ev.StateCode=sm.Id
 inner join category cat on ev.Categoryid=cat.Id
 left join aspnetusers asp on ev.userid=asp.Id
 order by createddate desc

在第7列事件时间我正在投射它并检查该列中是否有空值然后设置默认值。 但是当我通过我的c#代码执行存储过程时 她是我的代码

public static async Task<IEnumerable<Event>> GetallPostedEvents()
        {
            using (var con = DbHelper.SqlConnection())
            {
                return await con.QueryAsync<Event>(GetEventsSP, commandType: CommandType.StoredProcedure);

它会像这样返回错误

System.String&#39;到&#39; System.TimeSpan

表中EventTime列的数据类型是时间

我的c#代码中的EventTime数据类型是

 public TimeSpan?EventTime { get; set; }

请帮忙。

1 个答案:

答案 0 :(得分:1)

注意:在SP中,您正在进行char(10)转换,即字符串和映射失败。

你可以这样做

EventTime = TimeSpan.Parse(dbstring);

由于您直接使用mapper键入Event。将其映射到字符串然后进行解析。