【问题标题】:Date parameter in SQL Server stored procedure from ASP.NET来自 ASP.NET 的 SQL Server 存储过程中的日期参数
【发布时间】:2013-09-09 14:01:54
【问题描述】:

我编写了一个 SQL Server 存储过程,除其他外,它接受 date 参数:

CREATE PROCEDURE data.addScore
    ... (some parameters),
    @testDate date
AS

在 ASP.NET 页面上,我有一个带有日历扩展器控件(来自 AJAX 工具包)的文本框,允许用户选择日期;日期以DD/MM/YYYY 格式存储在文本框中。我有一些代码应该使用文本框中的日期值执行带有参数的存储过程:

cmd.Parameters["@testDate"].Value = Convert.ToDateTime(((TextBox)li.FindControl("date")).Text);

我知道我绝对可以使用((TextBox)li.FindControl("date")).Text 获得文本框的值,但是对于我来说,我无法将其转换为不会引发一些错误之一的格式,主要是“输入字符串是格式不正确。

当我直接在服务器上运行存储过程时,我通常会绑定 @testDate = 'YYYYMMDD' 这样的参数。

【问题讨论】:

    标签: asp.net sql-server


    【解决方案1】:

    我建议您不要在文本框中使用 dd/mm/yyyy 等区域性模糊格式存储任何内容。如果您使用像 YYYYMMDD 这样的明确格式,则不会有任何问题。如果用户从日历控件或其他东西中挑选,应该很容易将您提供给他们的日期与您传递给数据库的日期分开。

    【讨论】:

    • 要点 - 感谢您的回答。我想了解这一切——目前我有一个SqlDataSource,它使用与ControlParameter 相同的文本框到date 字段,并且效果很好。我在 ASP.NET 为自己的绑定正确执行的代码中做错了什么?
    • @Katstevens 我不知道你的整个设置,但很可能某些层使用美国英语作为语言环境,或 m/d/y 的日期格式。最安全的方法是在将字符串文字传递给数据库时始终使用明确的格式,无论您向用户显示什么(尽管我也建议使用明确的格式)。
    • 目前我正在使用Convert.ToDateTime 来获取一个保存日期的DateTime 对象,并且它正在正确解析它。我认为将其传递给数据库参数将是最明确的解决方案,因为它不依赖于格式。我收到关于将字符串转换为 Int32 的错误 - 但我使用的是日期对象!想法?
    【解决方案2】:
    <asp:Textbox id="date" runat="Server"></asp:Textbox>
    
    <cc1:CalendarExtender ID="calwhendate" runat="server" Enabled="true" Format="YYYYMMDD"
    TargetControlID="date"></cc1:CalendarExtender>
    

    将您的 Ajax 日历控件更改为您想要的格式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多