在SQL Server中从字符串转换为日期类型

时间:2011-08-16 10:50:56

标签: c# asp.net tsql sql-server-2008

例如: 我让用户输入日期

<asp:TextBox ID="date" runat="server" Width="200px" Text = "20110815"></asp:TextBox>
<ajaxToolkit:CalendarExtender ID="CalendarExtender" runat="server" PopupPosition="BottomLeft" PopupButtonID="date"
TargetControlID="date" Format="yyyyMMdd" FirstDayOfWeek="Monday">
</ajaxToolkit:CalendarExtender>

问题是在我的存储过程中,我尝试将该字符串用作日期类型

@StartDate nvarchar(8),
@StartDate_int int =0
AS

BEGIN
select  @StartDate_int=CAST(convert(varchar(12),DATEADD(week,DATEDIFF(week,0,@StartDate),0),112) as int)
select * from table where date(has int type)// = @StartDate_int

END

当我尝试在MS Server管理工作室中测试该存储过程时,我为@StartDate = 20110101定义了参数,并且存储过程确实返回了所有已更正的行,但是当我尝试在我的asp.net项目中使用存储过程时,将@StartDate参数设置为文本框中的字符串,它不返回任何行。

    <asp:SqlDataSource ID="SqlDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SelectSpecificTimeSheet" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:SessionParameter DefaultValue="user" Name="UserName" 
            SessionField="loginState" Type="String"/>
        <asp:ControlParameter DefaultValue="20110815" ControlID="date" Name="StartDate" PropertyName="Text" Type="String"/>
        <asp:Parameter Name="StartDate_int" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>

有人能告诉我我做错了什么:(

2 个答案:

答案 0 :(得分:0)

几点建议:

  1. 您可以使用Sql Profiler查看哪些数据来自Sql server(适用于Enterprise Sql Server的Microsoft Sql Profiler或适用于Sql Server Express的AnjLab Sql Profiler

  2. 创建单独的类以调用sql server(存储库/数据 经理层)并用于访问您的数据 经理 - 通过这种方式,您将始终可以控制正在发生的事情 有

答案 1 :(得分:0)

http://linesofcode.net/snippets/45

看看这些例子。使用Sql Profiler捕获SQL Server的输入是一个好主意,因为@cheburek建议你知道你的服务器页面传递给RDBMS。