如何将.Net日期时间转换为T-SQL日期时间

Joe*_*ips 5 .net t-sql asp.net datetime

MyDataSource.SelectParameters["startDate"].DefaultValue =
                                     fromDate.SelectedDate.Date.ToString();
Run Code Online (Sandbox Code Playgroud)

如您所见,我在.Net SqlDataSource中设置参数的默认值.我不认为字符串输出正确的格式.什么是正确的格式,以便T-SQL Datetime能够正确匹配它?

以下是现在输出的格式:

  • 5/1/2009 12:00:00 AM
  • 5/4/2009 11:59:59 PM

编辑:在我有DataSource之前应该编写SqlDataSource

这是一些代码

<asp:SqlDataSource ID="MyDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:sampledb %>" SelectCommand="Recording_Select" SelectCommandType="StoredProcedure" OnSelecting="MyDataSource_Selecting">
    <SelectParameters>
        <asp:ControlParameter ControlID="respondentID" DefaultValue="%" Name="RespondentID" PropertyName="Text" Type="String" />
        <asp:SessionParameter Name="projectCode" SessionField="proj" Type="String" />
        <asp:ControlParameter ControlID="interviewerList" Name="InterviewerID" PropertyName="SelectedValue" Type="String" />
        <asp:ControlParameter ControlID="dispCodeList" Name="dispCode" PropertyName="SelectedValue" Type="Int32" />
        <asp:ControlParameter ControlID="fromDate" DefaultValue="1/1/1900" Name="startDate" PropertyName="SelectedValue" Type="DateTime" />
        <asp:ControlParameter ControlID="toDate" DefaultValue="1/1/1900" Name="endDate" PropertyName="SelectedValue" Type="DateTime" />
    </SelectParameters>
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)

编辑: 嗯,我想出了问题,看起来有点傻.代码永远不会调用DefaultValue,因为总有一个值存在.因此,我唯一的解决方案是创建一个新的隐藏标签控件并将更正的日期时间加载到其中.这几乎就是诀窍.我不知道我是如何忽视这一点的.

Ben*_*ter 9

你可以使用一个SqlDateTime结构

DateTime DotNetDateTime = new DateTime(2009, 5, 4);
System.Data.SqlTypes.SqlDateTime sqlDateTime = new System.Data.SqlTypes.SqlDateTime(DotNetDateTime);
Run Code Online (Sandbox Code Playgroud)

或者直接在一行中(因为SqlDateTime在.NET DateTime类中的构造函数重载中采用相同的args):

System.Data.SqlTypes.SqlDateTime sqlDateTime = new System.Data.SqlTypes.SqlDateTime(2009, 5, 4);
Run Code Online (Sandbox Code Playgroud)


Joe*_*orn 3

您最初是如何创建参数的?您应该能够将数据类型指定为当时的日期时间。然后直接将日期时间分配给参数,而不是尝试将其转换为字符串。


根据您发布的代码,您最好的选择可能就是预先填充您的控件。此外,在该上下文中,默认值看起来很好,所以我怀疑问题出在其他地方。尝试将CancelSelectOnNullParameter控件的属性设置为 False。