将DateTime设为Gridview的SqlDataSource参数

3

嗨,我想使用我的存储过程在最近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>

当我测试这个时,我的屏幕变空白了(除了主页面元素),没有错误信息。有什么想法吗?

你那里有任何数据吗? - V4Vendetta
1个回答

4

编辑:尽管早期版本的答案已被接受,但看起来我误解了使用的参数类型。 Web控件 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,但它看起来像你在标记中和代码中都引入了参数两次。鉴于你在标记中没有这些值(包括绑定),你可能需要从那里删除它们,但我对此不确定。
如果你的查询没有达到预期结果,你应该检查数据库日志(或适当的工具)以查看实际执行的查询语句。

1
如果我删除toString(),会得到以下错误:“System.Web.UI.WebControls.ParameterCollection.Add(string, System.Data.DbType, string)的最佳重载方法匹配具有一些无效参数”。 - user1051364
1
此外,从aspx文件中删除参数似乎解决了问题...至少现在屏幕上有一些数据。不过我不得不使用toString()转换... - user1051364
我有完全相同的问题。.Add方法只允许字符串,而在我的情况下,它会导致SQL错误。不太确定该如何继续。 - carny666
@carny666:不,它确实不仅限于字符串。我建议您提出一个带有适当细节的新问题。 - Jon Skeet
1
@carny666:没错,第三个参数的类型是string。(之前你说的我没明白)我必须承认,当我写这个答案时(现在已经很久了),我怀疑自己和SqlDbParameter混淆了。这看起来像是一个非常糟糕的API - 我会编辑一些建议。 - Jon Skeet
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接