쿼리를 매개 변수화 할 때 문자열에서 날짜 및 / 또는 시간을 변환 할 때 SQL Server 변환이 실패했습니다.

학장

이 문제에 대해 궁금합니다. SQL Server 데이터베이스에서 다음 SQL을 실행하는 경우 :

SELECT [id] 
FROM [dbo].[events] 
WHERE createdon BETWEEN '2016-07-09' AND '2016-07-10'

이벤트를 잘 반환합니다. 이 경우 createdon열은 데이터 유형 datetime입니다.

ASP.Net에서 해당 쿼리를 실행하면 매개 변수화 된 쿼리로 바뀝니다.

SQL 프로파일 러에 따르면 다음 쿼리가 실행됩니다.

EXEC sp_executesql N'SELECT [id] FROM [dbo].[events] WHERE createdon BETWEEN ''@DateFrom''  AND ''@DateTo'' ',
           N'@DateFrom datetime,@DateTo datetime',
           @DateFrom = '2016-07-09',
           @DateTo = '2016-07-10';

위의 쿼리가 처음 시작한 쿼리와 동일한 것 같습니다. @DateFrom@DateTo올바른 세트로되어 datetime있는 유형과 일치 createdon.

그러나 매개 변수화 된 쿼리는 다음과 함께 실패합니다.

문자열에서 날짜 및 / 또는 시간을 변환 할 때 SQL Server 변환이 실패했습니다.

왜 이래요? 누군가가 나를 깨달을 수 있기를 바랍니다 :). 두 쿼리 모두 동일한 SQL 로그인에서 실행되었습니다. .Net을 통해 매개 변수를 추가했습니다.command.Parameters.AddWithValue

(그런데, 결국 쿼리에 시간 요소가있을 것이지만 지금은 간단하게 제거했습니다).

Alex Kudryashev

문제는 ''매개 변수 주위의 아포스트로피 에 있습니다. 아마도 ASP.NET에서 이와 같이 쿼리를 정의했을 것입니다.

string query = "SELECT [id] FROM [dbo].[events] WHERE createdon BETWEEN ''@DateFrom''  AND ''@DateTo'' ";

그런 다음 매개 변수를 추가합니다.

cmd.Parameters.AddWithValue("@DateFrom","2016-07-09");

ASP.NET은이를 문자열 ( varchar) 로 간주합니다 .
이 시도.

string query = "SELECT [id] FROM [dbo].[events] WHERE createdon BETWEEN @DateFrom  AND @DateTo ";
//...
cmd.Parameters.Add("@DateFrom",SqlDbType.Datetime).Value = "2016-07-09";

최신 정보

OP ( ...BETWEEN ''@DateFrom'' AND ''@DateTo'') 의 쿼리는 선언 할 수있는 매개 변수 값을 사용하지 않습니다 datetime. 그것은 사용 @DateFrom하고 @DateTo있는지에 대한 날짜없는 리터럴.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관