C# Can´;无法将SQL DATEDIFF输出获取为int-输入字符串的格式不正确

C# Can´;无法将SQL DATEDIFF输出获取为int-输入字符串的格式不正确,c#,sql,asp.net,C#,Sql,Asp.net,当我试图用int解析我的DATEDIFF时,结果是“输入字符串的格式不正确” 它与其他SQL输出一起工作,但这不是DATEDIFF 我曾尝试对其进行强制转换,但仍然出现相同的错误 " CAST((DATEDIFF(SECOND, start_time, stop_time)) AS int) AS Frokost " + int frokost = int.Parse(row["Frokost"].ToString()); @if (frokost >= 1800) {

当我试图用int解析我的DATEDIFF时,结果是“输入字符串的格式不正确”

它与其他SQL输出一起工作,但这不是DATEDIFF

我曾尝试对其进行强制转换,但仍然出现相同的错误

" CAST((DATEDIFF(SECOND, start_time, stop_time)) AS int) AS Frokost " +

int frokost = int.Parse(row["Frokost"].ToString());

  @if (frokost >= 1800)
  {
      <td style="background-color:red;"><b>@row["Frokost"]</b></td>
  }
  else
  {
      <td style="background-color:limegreen;"><b>@row["Frokost"]</b></td>
  }
“将((DATEDIFF(秒,开始时间,停止时间))转换为int)转换为Frokost”+
int-frokost=int.Parse(行[“frokost”].ToString());
@如果(frokost>=1800)
{
@行[“Frokost”]
}
其他的
{
@行[“Frokost”]
}

您不需要在SQL中将datediff的输出强制转换为整数;它已经是(请参阅:“返回int”)

这意味着您的数据已经是int;您不需要
ToString
然后
Parse

假设行是datarow:

int frokost = 0;
if(!row.IsNull("Frokost"))
   frokost = (int)row["Frokost"]; //weakly typed datarow returns frokost as int-boxed-as-object, cast it back


@if (frokost >= 1800) ...

(另一方面,不清楚为什么要将
行[“Frokost”]
转换为字符串,然后对其进行解析。如果它是整数,我希望您能够直接转换为C中的值。作为诊断步骤,您还应该看到
行[“Frokost”]的值是多少。)
实际上是…也许是DBNull?我还鼓励您提供一小段不是Razor HTML的示例代码来显示您正在做什么。这个问题不会特定于ASP.NET,因此请尽可能简单地显示C代码来演示问题-最好是在a中。错误消息
输入字符串不是在正确的f中ormat正在告诉你你需要知道的一切。
start\u time
stop\u time
不是根据SQL Server当前设置要求格式化的字符串。@AlwaysLearning-该错误消息似乎不是来自SQL,而是来自.NET。@Damien\u不相信的人说得很好,我完全错过了。嗯,我想知道如果结果集包含两个
Frokost
列,那么,(或者是
null
)和
int.Parse()
看到的东西现在是
datediff()
的输出?另一种技术是使用
Convert.ToInt32(行[“Frokost”])
。我相信这可以更好地处理空字段值。我不确定我是否同意:根据我的经验,Convert.ToInt32(DBNull.Value)会导致“DBNull不能转换为其他类型”异常。