2014-10-01 2 views
0

날짜가 근무일이 아닌지 확인하고 nessecary 인 경우이를 변경하는 proc가 저장되어 있습니다. 아래의 비주얼 스튜디오에서이 프로 시저를 호출합니다. 그러나 proc 실행하면 나는 The conversion of a varchar data type to a datetime data type resulted in an out-of-range value 메시지를받습니다. Visual Studio에서 동일한 값을 사용하여 SQL Server Management Studio에서 동일한 proc을 실행하면 작동합니다.varchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어나는 값이 발생 함 - 저장 프로 시저

ALTER PROCEDURE [dbo].[usp_PSTN_GetWorkingDay] 

    @TargetDate VARCHAR(30) 

AS 

BEGIN 

    SET NOCOUNT ON; 

    /* Workout 10 working days from present date */ 
    DECLARE @MaxDateCantBook DATETIME 

    ;WITH DatesCTE AS 
    (
     SELECT Date_Id, 
       Date_Date, 
       Date_JDE, 
       Is_WorkingDay, 
       ROW_NUMBER() OVER(ORDER BY Date_Date) AS rn 
     FROM dbo.Dates 
     WHERE Is_WorkingDay = 1 
       AND Date_Date > GETDATE() 
    ) 

    SELECT @MaxDateCantBook = (SELECT Date_Date FROM DatesCTE WHERE rn = 10)          

    /* Change Target date if it is less than 10 working days in the future */ 
    IF(@TargetDate <= @MaxDateCantBook) 
    BEGIN 

     SET @TargetDate = @MaxDateCantBook 
    END 


    SELECT Date_Date 
    FROM dbo.Dates 
    WHERE Date_Date >= @TargetDate 
    AND Date_Date <= (SELECT MIN(Date_Date) 
         FROM dbo.Dates 
         WHERE Is_WorkingDay != 0 AND Date_Date >= @TargetDate) 
    ORDER BY Date_Date DESC 


END 

나는 다음과 같은 쿼리에 대한 매개 변수를 설정 해요 :

input.date 문자열입니다
List<SqlParameter> parameters = new List<SqlParameter>() 
       { 
        new SqlParameter("TargetDate", SqlDbType.VarChar, 30){ Value = input.date} 
       }; 

= 2014년 9월 30일

+1

당신'이 형식으로 날짜 값을 포함 input.date' - ** "30/09/2014 (dd/mm/yyyy) "**. 그러나 SQL 표준 형식 인 - ** "yyyy-mm-dd"**로 날짜를 전달하는 것이 더 좋습니다. 이렇게하면 문제가 해결 될 수 있습니다. –

+0

@KrishnrajRana, ** yyyy-mm-dd는 SQL 표준이 아닙니다! ** '2014-10-01'은 유럽에서 1 월 10 일이됩니다. ** yyyymmdd ** – adrianm

답변

1

변화 @TargetDate VARCHAR(30)하여 SP에 @TargetDate DATETIME합니다.

당신은 당신이 할 수있는 매개 변수를 설정할 때 다음과 같이

cmd.Parameters.AddWithValue("@TargetDate", 
     DateTime.ParseExact(input.date, "yyyy-MM-dd", CultureInfo.InvariantCulture)); 

또는

같아요
List<SqlParameter> parameters = new List<SqlParameter>() 
       { 
        new SqlParameter("@TargetDate", SqlDbType.DateTime){ Value = DateTime.ParseExact(input.date, "yyyy-MM-dd", CultureInfo.InvariantCulture)} 
       }; 
+0

응답 해 주셔서 감사합니다. 내가 제안한대로 '데이터 형식을 nvarchar를 datetime으로 변환하는 중 오류가 발생했습니다'라는 메시지가 나타나고 입력 매개 변수가 '30/09/2014 00 : 00 : 00'이되었습니다. – user667430

+0

사과가 위의 문제를 해결했으며 모든 것이 지금 바뀌고있는 것 같습니다. input.date의 데이터 유형이 DateTime – user667430

+0

으로 변경해야합니다. 나는 그것이 도움이 되었기 때문에 기쁘다. – Damith

관련 문제