Проверяйте даты перед выполнением sql в asp.net - PullRequest
2 голосов
/ 01 сентября 2009

У меня есть сетка данных, привязанная к источнику данных обычным способом (упрощенно для краткости):

<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-запрос на запуск, если проверка не удалась? (Я подозреваю, что в какой-то момент мне нужно проверить страницу isValid, но мои попытки попробовать это в событии datasource_Selecting, похоже, не работают)

Заранее спасибо за любую помощь

Ryan

Ответы [ 2 ]

2 голосов
/ 14 сентября 2009

Вы можете справиться с этим с помощью события SqlDataSource.Selecting и вызова Cancel.

Добавляя делегат обработчика событий в обработать событие выбора, вы можете выполнить любую дополнительную предварительную обработку требуется или отменить запрос к базе данных полностью. Поскольку SqlDataSourceSelectingEventArgs класс происходит от Класс SqlDataSourceCommandEventArgs, Вы можете отменить ожидание Запрос базы данных SqlDataSource установив для свойства Cancel значение true. Вы можете исследовать и манипулировать CommandText, коллекция параметров, и другие свойства запроса к базе данных до запуска запроса доступ к объекту DbCommand выставлено свойством Command. Вы также можно изучить DataSourceSelectArguments объект, который передается методу Select доступ к свойству Arguments.

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

0 голосов
/ 12 октября 2011

Другой способ сделать это - использовать CompareValidator:

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

Этот валидатор имеет встроенную операцию проверки даты и не позволяет странице продолжать обработку, пока не пройдут все проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...