Установка DateTime в качестве параметра SqlDataSource для Gridview - PullRequest
3 голосов
/ 09 января 2012

Эй, я хотел бы отобразить определенные данные с моей хранимой процедурой за последние 30 дней. вот что я сделал (файл aspx.cs):

 protected void Page_Load(object sender, EventArgs e)     
        {
          DateTime toDate, fromDate;
          toDate = DateTime.Now;

          fromDate = toDate.Subtract(new TimeSpan(31, 0, 0, 0));

          SqlDataSource1.SelectParameters.Add("fromDate", DbType.DateTime, fromDate.ToString());
          SqlDataSource1.SelectParameters.Add("toDate", DbType.DateTime, toDate.ToString());                    

    }

вот мой файл aspx

 <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Width="232px" DataKeyNames="CustomerId" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:BoundField DataField="CreationDate" HeaderText="CreationDate" SortExpression="CreationDate" />
            </Columns>
        </asp:GridView>
        <br />
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SSEnewConnectionString %>"
            SelectCommand="procCustomer_SelectbyCreationDate" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:Parameter DbType="DateTime" Name="fromDate" />
                <asp:Parameter DbType="DateTime" Name="toDate" />
            </SelectParameters>
        </asp:SqlDataSource>
        </form>

когда я проверяю это, мой экран становится пустым (кроме элементов главной страницы) и ошибок нет. есть идеи?

1 Ответ

3 голосов
/ 09 января 2012

РЕДАКТИРОВАТЬ: Хотя более ранняя версия этого ответа была принята, похоже, я неправильно понял используемый тип параметра. веб-элементы управления ParameterCollection выглядят несколько ужасно.

Я бы предложил преобразовать значения даты в формат SQL (насколько мне больно, откровенно говоря, следует избегать преобразования строк, насколько это возможно). Например:

SqlDataSource1.SelectParameters.Add("fromDate", DbType.DateTime,
    fromDate.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));
SqlDataSource1.SelectParameters.Add("toDate", DbType.DateTime,
    toDate.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));

(Измените на yyyy-MM-dd для типов только с датой.)

Я сам не использовал SqlDataSource, но он также выглядит как будто вы вводите параметры дважды - один раз в разметке и один раз в коде. Учитывая, что у вас нет значений в разметке (в том числе в привязках), вы можете удалить их оттуда, но я могу ошибаться в этом отношении.

Если ваш запрос не выполняет то, что вы ожидаете, вам следует проверить журналы базы данных (или любой другой подходящий инструмент), чтобы проверить, какой фактический запрос выполняется.

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