【问题标题】:Validate dates before executing sql in asp.net在asp.net中执行sql之前验证日期
【发布时间】:2009-09-01 11:03:45
【问题描述】:

我有一个以典型方式绑定到数据源的数据网格(为简洁起见):

<asp:SqlDataSource ID="ds" runat="server" ConnectionString="xxx"
     ProviderName="yyy" SelectCommand="SELECT "a from A where date > ?">
    <SelectParameters>
        <asp:ControlParameter ControlID="txtDateFrom" Name="fromDate" PropertyName="Value" Type="DateTime"/>
    </SelectParameters>

...

我还有一个关于 txtDateFrom 的自定义验证器

<asp:CustomValidator ID="fromDateCorrectVal" runat="server" ControlToValidate="txtDateFrom"  ErrorMessage="From date is not valid" OnServerValidate="fromDateCorrectVal_ServerValidate" Display="None"/>

其中后面的代码是这样的:

protected void fromDateCorrectVal_ServerValidate(object source, ServerValidateEventArgs args)
{
    DateTime parsedDate;
    if (!DateTime.TryParse(tryDate, out parsedDate))
    {
            args.IsValid = false;
            fromDateCorrectVal.ErrorMessage = "Invalid from date";
    }

}

但这似乎不起作用!如果我在日期字段中输入垃圾,我会收到一个 ASP 错误 - 解析无效的日期标记。

如果验证失败,如何阻止 SQL 尝试触发? (我怀疑我需要在某些时候检查页面是否有效,但我在 datasource_Selecting 事件中尝试这个的努力似乎不起作用)

提前感谢您的帮助

瑞恩

【问题讨论】:

    标签: .net asp.net validation


    【解决方案1】:

    您可以使用 SqlDataSource.Selecting 事件处理此问题并调用 Cancel。

    通过将事件处理程序委托添加到 处理 Selecting 事件,您可以 执行任何额外的预处理 需要或取消数据库查询 完全。因为 SqlDataSourceSelectingEventArgs 类 来源于 SqlDataSourceCommandEventArgs 类, 您可以取消待处理 SqlDataSource 数据库查询由 将 Cancel 属性设置为 true。 您可以检查和操作 CommandText,参数集合, 和其他数据库查询属性 在运行查询之前 访问 DbCommand 对象 由 Command 属性公开。你 还可以检查 DataSourceSelectArguments 对象 被传递给 Select 方法 访问 Arguments 属性。

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasourceselectingeventargs.aspx

    【讨论】:

      【解决方案2】:

      实现此目的的另一种方法是使用 CompareValidator:

      <asp:CompareValidator id="dateValidator" runat="server" Type="Date" Operator="DataTypeCheck" ControlToValidate="txtDateFrom" ErrorMessage="Error!" />
      

      此验证器具有内置的日期验证操作,并且在所有验证通过之前不允许页面继续处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-22
        • 2018-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多