2013-08-20 2 views
0

Access에서 가져 오는 C# TableAdapter에서 이상한 동작이 나타납니다. Access에서 결과를 반환하고 TableAdapter Query Builder 실행 쿼리 창에서 결과를 반환하지만 코드에서 실패하고 데이터 미리보기 대화 상자를 사용할 때 오류가 발생하는 쿼리가 있습니다.Access에서 데이터 형식이 일치하지 않습니다. 식에서

이 문제는 DateTime 매개 변수에있는 것 같습니다. 이상한 점은 중첩 된 선택 문장 안에 넣을 때만 실패한다는 것입니다. 전체 쿼리에 적용하면 정상적으로 작동합니다. 불행히도 중첩 된 부분에서 필요하지만 "데이터 형식 불일치 조건 식"항상 얻을. 다른 매개 변수를 제거하고 데이터 매개 변수를 중첩 된 쿼리에 그대로두면 쿼리가 작동합니다.

작품 :

SELECT  Employee.FirstName, TimeCard.ID 
FROM   (((Employee INNER JOIN 
        MasterFilmUnit ON Employee.ID = MasterFilmUnit.ID) INNER JOIN 
        MasterDepartment ON Employee.ID = MasterDepartment.ID) LEFT OUTER JOIN 
         (SELECT  ID, WorkDate, EmployeeID 
          FROM   DailyTimeCard 
          WHERE (WorkDate = ?)) TimeCard ON TimeCard.EmployeeID = Employee.ID) 

작품 :

SELECT  Employee.FirstName, TimeCard.ID 
FROM   (((Employee INNER JOIN 
        MasterFilmUnit ON Employee.ID = MasterFilmUnit.ID) INNER JOIN 
        MasterDepartment ON Employee.ID = MasterDepartment.ID) LEFT OUTER JOIN 
         (SELECT  ID, WorkDate, EmployeeID 
          FROM   DailyTimeCard 
          ) TimeCard ON TimeCard.EmployeeID = Employee.ID) 
WHERE Employee.ProjectID=? AND WorkDate = ? 

가 작동하지 않습니다 내가 t를 얻을 수있었습니다

SELECT  Employee.FirstName, TimeCard.ID 
FROM   (((Employee INNER JOIN 
        MasterFilmUnit ON Employee.ID = MasterFilmUnit.ID) INNER JOIN 
        MasterDepartment ON Employee.ID = MasterDepartment.ID) LEFT OUTER JOIN 
         (SELECT  ID, WorkDate, EmployeeID 
          FROM   DailyTimeCard 
          WHERE WorkDate = ?) TimeCard ON TimeCard.EmployeeID = Employee.ID) 
WHERE Employee.ProjectID=? 

편집 그는 쿼리의 직원 부분을 중첩하여 결과를 원했기 때문에 where 문을 전체 쿼리에 적용하지 않았습니다. 나는까지 현재 실행 해요,하지만 원래가 작동하지 않는 이유를 모두 같은, 나는 알아낼 수 없습니다 :

작품 :

SELECT  Employee.FirstName, TimeCard.ID 
FROM   ((((SELECT Employee.* 
          FROM   Employee Employee_1 
          WHERE  (ProjectID = ?)) Employee Left OUTER JOIN 
        MasterFilmUnit ON Employee.ID = MasterFilmUnit.ID) LEFT OUTER JOIN 
        MasterDepartment ON Employee.ID = MasterDepartment.ID) LEFT OUTER JOIN 
         (SELECT  DailyTimeCard.* 
          FROM   DailyTimeCard 
          WHERE  (WorkDate = ?)) TimeCard ON TimeCard.EmployeeID = Employee.ID) 

어떤 도움을 주시면 감사하겠습니다. 나는 혼란 스럽다.

+0

코드 또는 디자이너에서'TableAdapter'를 어떻게 구축하고 있습니까? 세 번째 쿼리의 –

+1

은 두 번째 매개 변수로 workdate를 제공하고 있습니까? – muratgu

+0

테이블 어댑터는 디자이너에서 작성되었습니다. 예, 매개 변수가 올바른 순서로 제공됩니다. 매개 변수가 잘못된 순서로 제공되면 "int를 datetime으로 변환 할 수 없습니다"라는 예상 오류가 발생하므로 각 paramers의 적절한 유형을 확실히 알고있는 것으로 보입니다. – JumboMaximus

답변

0

? 매개 변수 자리 표시가 표시되는 순서대로 처리됩니다, 그래서이 쿼리는 WorkDate로 매개 변수 1을 기대하는 것이 여전히 작동하지의 포장하려고 할 경우, 매개 변수 2 ProjectID

을 수 ? 매개 변수 표시자를 CDate() 및/또는 (아마도) CInt()으로 지정하면 매개 변수가 올바른 데이터 형식으로 설정됩니다.

관련 문제