2013-06-03 8 views
2

ms 액세스로 만든 데이터베이스에서 2013 년 3 월 3 일의 레코드를 가져 오려고합니다. 날짜가 일/월/년의 형식으로 저장됩니다, 아래에있는 내 쿼리액세스 mdb 날짜/시간 문제

AND (a.Date = #" + date + "#)) order by e.E_ID asc 

입니다 그러나 걸리는 동안 놀라운 것은 내가, 오늘 날짜입니다 2013년 3월 6일의 날짜의 기록을 삽입 한한다 그것은 2013 년 3 월 3 일으로, 나는 여전히 같은 문제에 대한 내 지역 설정을 수정했습니다. 또한 내 쿼리에서 내가 dd/MM/yyyy 사용하고 일치하는 날짜에 대한 쿼리입니다. 이 버그는 Microsoft의 버그입니까?

답변

2

날짜가 나는 그들이하지 않은 생각 일/월/년

의 형식으로 저장됩니다 도와주세요. 의심의 여지가 있지만 10 자 문자열보다 훨씬 효율적인 네이티브 날짜/시간 형식으로 저장되었다고 생각됩니다. (예를 들어, varchar 대신 적절한 필드 유형을 사용한다고 가정합니다.) 데이터의 본질과 "텍스트로 변환 할 때 어떻게 표시되는지"를 구분하는 것이 중요합니다.

그러나 놀라운 것은

나는이 같은 놀라운 표시되지 않습니다. 불필요하게 문자열 변환을 사용하는 것이 당연한 결과라고 생각합니다. 그들은 거의 항상 당신을 결국 물으십시오. 당신은 문자열을 나타 내기 위해 노력하고 있지 않습니다. 당신은 날짜를 나타 내기 위해 노력하고 있습니다. 가능한 한 그 유형을 사용하십시오.

당신이해야 : 여러 가지 이유로 쿼리에 대한

  • 를 사용하여 매개 변수화 된 SQL - 가장 중요한 SQL 주입 공격을 피하기 위해, 또한 는 매개 변수 값을 지정합니다 이런 종류의
  • 의 불필요한 문자열 변환을 방지하기 위해 a DateTime 따라서 문자열 변환을 피하십시오

사용중인 공급자 유형을 지정하지 않았습니다. 내 생각 엔 OleDbConnection입니다. 일반적으로 관련 명령 클래스의 Parameters 속성에 대한 설명서를 보면 적절한 예를 찾을 수 있습니다. 예를 들어, OleDbCommand.ParametersOleDbConnection에 대한 매개 변수화 된 쿼리를 표시합니다. 워드 프로세서에서 주목할만한 한 가지 :

는 OLE DB .NET 공급자하지 않습니다 SQL 문 또는 CommandTypeText로 설정 될 때 OleDbCommand에 의해 호출 저장 프로 시저에 매개 변수를 전달하는 명명 된 매개 변수를 지원합니다. 이 경우 물음표 (?) 자리 표시자를 사용해야합니다. [...] 따라서 에 OleDbParameter 개체가 추가되는 순서는 명령 텍스트의 매개 변수에 대한 물음표 자리 표시 자 위치와 직접 일치해야합니다.

+0

의심의 여지없이, 최선의 답변을 얻었습니다 .... – greatmajestics

관련 문제