Преобразование из строки в тип даты в SQL-сервере - PullRequest
1 голос
/ 16 августа 2011

Например: я позволяю пользователю вводить дату как

<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 голосов
/ 16 августа 2011

http://linesofcode.net/snippets/45

Посмотрите на эти примеры. Было бы неплохо захватить ввод данных в SQL Server с помощью Sql Profiler, как подсказывает @cheburek, чтобы вы знали, какая страница вашего сервера передается в СУБД.

0 голосов
/ 16 августа 2011

Несколько предложений:

  1. Вы можете использовать Sql Profiler, чтобы увидеть, какие данные поступают на сервер Sql (Microsoft Sql Profiler для Enterprise Sql Server или AnjLab Sql Profiler дляSql Server Express)

  2. Создайте отдельный класс для вызовов на сервер SQL (уровень хранилища / менеджер данных) и используйте его для доступа к своему менеджеру данных - таким образом вы всегда сможете контролировать, чтотам происходит

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