【问题标题】:Datetime Update format error Asp.Net日期时间更新格式错误 Asp.Net
【发布时间】:2013-11-09 22:36:04
【问题描述】:

我有一个这样的意大利格式日期时间字符串:

23/03/2012

本次更新的sql命令在datetime部分是这样的:

DateTime.ParseExact(Reg_tes.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture)

这适用于我的 Sql 服务器(意大利语),但如果我在我的服务器(英语)上进行此操作,则会出现此错误:

"将 varchar 数据类型转换为 datetime 数据类型 导致超出范围的值"

我该如何解决这个问题?

【问题讨论】:

  • 既然您将InvariantCulture 提供为IFormatProvider,那么无论是意大利文化还是英国文化都无关紧要。你从哪里得到异常?你使用 sql 参数吗?
  • 当我调用 UpdateCommand 在我的表中进行更新时
  • 请显示您的更新命令。
  • Data_tessera='" + DateTime.ParseExact(Reg_tes.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture) "'

标签: c# asp.net sql sql-server datetime


【解决方案1】:

您应该始终使用参数化查询来防止此类 sql 注入和本地化问题。

所以我假设您将此日期时间作为字符串传递给数据库。

using(var con = new SqlConnection("connection-string"))
using(var cmd = new SqlCommand("UPDATE dbo.TableName SET DateColumn=@DateColumn WHERE PK=@PK", con))
{
    DateTime reg_tes = DateTime.ParseExact(Reg_tes.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
    cmd.Parameters.AddWithvalue("@DateColumn", reg_tes);
    // other parameters ...
    con.Open();
    int affected = cmd.executeNonQuery();
}

【讨论】:

  • 我使用了一个带有更新命令代码的字符串,然后我将他分配给更新命令:data_mod.sql.UpdateCommand = dati; (dati 是更新字符串)
  • @ItalianBadAss:所以你不会像... SET DateColumn='" + DateTime.ParseExact(...) + "'...那样连接你的字符串来构建sql?永远不要那样做。
  • 是的,我连接..我不能发布它,因为它太大了......但正如我之前所说,我的命令在我的本地 sql 服务器上是可以的..更新有效..但不是英文sql服务器
  • @ItalianBadAss:始终使用参数化查询。 codinghorror.com/blog/2005/04/…
猜你喜欢
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
相关资源
最近更新 更多