2009-04-23 4 views
2

SQL 데이터베이스 테이블에 INSERT하려고하는데 작동하지 않습니다. 그래서 SQL 서버 프로파일 러를 사용하여 쿼리 작성 방법을 확인했습니다. 무엇을 보여줍니다 것은 다음과 같다 : 그것은 SQL에서 구문 오류가 발생하도록SQL datetime 필드 주위에 두 개의 작은 따옴표를 넣고 레코드를 삽입하지 못함

declare @p1 int 
set @p1=0 
declare @p2 int 
set @p2=0 
declare @p3 int 
set @p3=1 
exec InsertProcedureName @[email protected] output, @[email protected] output, 
         @[email protected] output, @ProjectID=N'0', @IPAddress=N'66.229.112.168', 
         @FirstName=N'Mike', @LastName=N'P', @Email=N'[email protected]', 
         @PhoneNumber=N'(254)637-1256', @MobilePhone=NULL, @CurrentAddress=N'', 
         @FromZip=N'10005', @MoveInAddress=N'', @ToZip=N'33067', 
         @MovingSize=N'1', @MovingDate=''2009-04-30 00:00:00:000'', 
           /*  Problem here ^^^ */ 
         @IsMovingVehicle=0, @IsPackingRequired=0, @IncludeInSaveologyPlanner=1 
select @p1, @p2, @p3 

당신이 볼 수 있듯이, 그것은 은 큰 따옴표에게 날짜 필드 주위에 따옴표의 두 쌍 넣습니다. 어딘가에 구성해야하는 것이 있는지 궁금합니다.

도움을 주시면 감사하겠습니다. 여기

은 환경 세부 사항입니다 :

여기
  • 비주얼 스튜디오 2008
  • .NET 3.5
  • MS SQL Server 2005의

은 내가 사용은 .NET 코드입니다 .. ..

//call procedure for results 
strStoredProcedureName = "usp_SMMoverSearchResult_SELECT"; 

Database database = DatabaseFactory.CreateDatabase(); 
DbCommand dbCommand = database.GetStoredProcCommand(strStoredProcedureName); 
dbCommand.CommandTimeout = DataHelper.CONNECTION_TIMEOUT; 

database.AddInParameter(dbCommand, "@MovingDetailID", DbType.String, objPropConsumer.ConsumerMovingDetailID); 
database.AddInParameter(dbCommand, "@FromZip", DbType.String, objPropConsumer.FromZipCode); 
database.AddInParameter(dbCommand, "@ToZip", DbType.String, objPropConsumer.ToZipCode); 
database.AddInParameter(dbCommand, "@MovingDate", DbType.DateTime, objPropConsumer.MoveDate); 
database.AddInParameter(dbCommand, "@PLServiceID", DbType.Int32, objPropConsumer.ServiceID); 
database.AddInParameter(dbCommand, "@FromAreaCode", DbType.String, pFromAreaCode); 
database.AddInParameter(dbCommand, "@FromState", DbType.String, pFromState); 
database.AddInParameter(dbCommand, "@ToAreaCode", DbType.String, pToAreaCode); 
database.AddInParameter(dbCommand, "@ToState", DbType.String, pToState); 

DataSet dstSearchResult = new DataSet("MoverSearchResult"); 
database.LoadDataSet(dbCommand, dstSearchResult, new string[] { "MoverSearchResult" }); 
+0

이 SQL 쿼리를 생성하는 코드도 게시 할 수 있습니까? 문제는 매우 분명합니다 (큰 따옴표와 초 사이의 초 및 밀리 초), 문제의 루트는이 쿼리를 생성 한 코드 조각에 있어야합니다. –

+0

.net 코드는 정확한 날짜 정보가 오기 때문에 게시 하시겠습니까? – Eppz

+0

첫 번째 위치에 쿼리를 작성하는 코드 (또는 문제를 재현하는 샘플)를 게시하여 백 아웃보다 앞쪽에서 작업하는 것이 가장 좋습니다. – Lazarus

답변

0

시험해보기 :

'2009-04-30 00:00:00.000' 

작은 따옴표와 "." 밀리 초 동안 ":"대신. 또는 다음을 시도하십시오.

'2009-04-30 00:00:00' 

밀리 초가 아닌지 확인하십시오.

+0

.NET 코드를 원래 게시물에 추가했습니다. BTW .. 나는 datetime 매개 변수를 사용하고 있으며 따옴표를 추가하지 않았습니다. – user82613

+1

흠. 당신은 실제로 질문을 읽었습니까? –

3

datetime 필드에 작은 따옴표를 추가하여 문자열로 보내고 싶다고 생각하십니까? 그러지 마. 매개 변수에 datetime 유형을 사용하고 따옴표를 추가하지 마십시오.

.Net 측에 코드를 표시하면 도움이됩니다.

+0

그는 코드대로 아닙니다. –

+0

@Neil 와우, 이것은 오래되었지만 나는 물 것입니다. 그가 게시 한 코드는 거기에 따옴표가 없다는 것을 증명하지 않습니다. 그는 'objPropConsumer'유형에 대한 코드를 공유하지 않으므로 MoveDate 멤버가 문자열 일 가능성이 높습니다. –

+1

그의 질문에서 프로파일 러의 SQL 출력을 살펴보고 올바르지 않게 인용 된 시간 필드 바로 아래의 "Problem here ^^^"를 참조하십시오. 이 버전의 프로파일 러에있는 버그입니다. 나는 미래의 수색자들을 위해서만 정리할 생각이다. –

0

objPropConsumer.MoveDate가 문자열입니까? 시작과 끝 부분에 아포스트로피가있는 문자열로 채워진 것처럼 보입니다. objPropConsumer.MoveDate를 '2009-04-30 00:00:00'상수로 바꾸고 작동하는지 확인하십시오. 그렇다면 MoveDate가 설정되거나 변환되는 위치에 문제가 있습니다.

1

SP2 또는 SP3는 프로파일

+0

이렇게 수정되었습니다. 또한보십시오 : http://geekswithblogs.net/influent1/archive/2007/05/31/112897.aspx –

0

나는 당신의 데이터베이스 클래스에서 문제를 찾는 것이이 문제를 해결해야한다. 아마도 AddInParameter() 메서드는 형식화 된 문자열이나 그와 비슷한 것을 추가하는 것과 같은 DateTime 매개 변수로 일부 jiggery-pokery를 수행합니다.

MSSQL에서 사용하려면 CreateStoredProc()SqlCommand의 인스턴스를 반환해야합니다 (사용하지 않으려는 DbCommand의 다른 하위 클래스가 있습니다). 확인한 다음 AddInParameter()이 의 인스턴스를 매개 변수 컬렉션에 추가하고 DbType 속성이 DbType.DateTime이고 Value 속성이 System.DateTime 인 속성을 추가했는지 확인합니다.

매개 변수가 SqlCommand에 제대로 추가되면 MSSQL 저장 프로 시저와 함께 DateTime 데이터와도 잘 작동합니다 (나에게는 수천 회 있습니다).

0

방금 ​​동일한 문제가 발생했습니다. 두 개의 작은 따옴표 만이 프로파일 러에 나타났습니다. 근본적인 (실제) 오류는 너무 많은 인수를 저장 프로 시저에 전달하고 있다는 것이 었습니다.

관련 문제