2011-07-01 6 views
1

DateTime 값을 쿼리에 DbParameter로 전달하는 데 문제가 있습니다. DateTime 값의 시간 부분이 제거 된 것 같습니다. 여기 DateTime 값을 OleDbCommand에 매개 변수로 전달

는 C#에서 샘플 코드입니다 :

DbProviderFactory _factory = OleDbFactory.Instance; 

DbCommand cmd = _factory.CreateCommand(); 
cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (?)"; 

DbParameter p = _factory.CreateParameter(); 
p.ParameterName = ""; // Not necessary 
p.Value = DateTime.Now; // assume Time != 00:00:00 
p.DbType = DbType.Date; // DateTime and DateTime2 don't work 

cmd.Parameters.Add(p); 

내 문제는 날짜 매개 변수는이 시간 부분과 SomeDateField 항상 시간과 0시 0분 0초을 가지고와 액세스에 도달하지 않는 것이다. SomeDateFieldDateTime하지 Date입니다에 대한 확인 데이터 유형을 확인

cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (#" + aDateTimeString + "#)"; 
+0

데이터 형식은 무엇입니까? 데이터베이스의 테이블에있는 열의? 또한'DbType.DateTime'이 무슨 뜻입니까? –

+0

DbType.DateTime 및 DbType.DateTime2를 사용할 때 명령을 실행할 때 '조건 식에 데이터 형식이 일치하지 않습니다'라는 예외가 발생합니다. –

+0

필자는 Access를 백엔드로 사용하므로 열 데이터 유형이 Date이지만 .NET의 DateTime과 동일하므로 시간 부분도 포함될 수 있습니다. –

답변

0

:

내가 좋아하는 뭔가를하고 싶지 않아요. 또한, 당신이 DbType.Date 대신 OleDbType.DateTime를 사용하는 거라고하면

p.DbType = DbType.DateTime; 
+0

다른 주석에서 말했듯이 DateTime과 DateTime2를 사용할 때 예외가 발생합니다. 유일하게 작동하는 것은 날짜입니다. –

0

을 만들려고, 나는 그것이 작동 확신합니다.

그러나 귀하의 게시물에서 알 수 있듯이보다 구체적인 DbType enum (및 클래스)을 사용하고 싶지 않으십니까?

그러나 데이터 액세스 계층에서보다 구체적인 OleDb 클래스를 사용해야한다고 생각합니다. 덜 지정된 'DbType'클래스를 사용하면 쓸모가 없습니다. 왜냐하면 다른 데이터베이스 유형을 타겟팅 할 때 각 DBMS가 고유 한 방언을 사용하기 때문에 SQL 구문을 변경해야 할 가능성이 매우 높기 때문입니다 (때로는 사소한 변화이지만 여전히 ...).

+0

글쎄요, 덜 구체적인 인터페이스가 노출되어있는 코드로 작업하고 있었기 때문에 그 코드를 사용하고 있습니다. 나는 그것을 바꿀 수 있지만, 나는 그것이 필요하지 않아야한다고 생각한다. OleDb 클립을 사용하여 도움이되는지 확인하겠습니다. –

0

OleDbType는 http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtype.aspx

당신이 DBType.DateTime "매개 변수의 유형을 사용하는 경우 .NET Framework 데이터 공급자에 따라 다릅니다. 유형을 지정가 매개 변수의 값을 변환하는 날짜 시간 enumeraton이 없습니다 형식을 지정하지 않으면 ADO.NET은 Parameter 개체의 Value 속성에서 매개 변수의 데이터 공급자 유형을 유추합니다. " http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx

관련 문제