2013-12-20 1 views
4

MS는 OleDb를 단계적으로 제거하고 다른 데이터베이스로 쉽게 이식 할 수 있도록 SQL Server 2012와 함께 ODBC를 사용하려고합니다.C# datetime to ODBC 날짜/시간 변환 오류

ERROR [22008] [Microsoft][SQL Server Native Client 11.0]Datetime field overflow. Fractional second precision exceeds the scale specified in the parameter binding.

좋아 나는 그런 종류의를 얻을 : 나는 날짜를 저장하려고 할 때 나는 다음과 같은 오류가 ODBC 데이터 액세스 클래스를 사용하려고하면

문제이다. C#은 ODBC 매개 변수가 사용하고자하는 것보다 높은 수준의 정밀도를가집니다. 나는 ODBC 구현이 초의 분수를 좋아하지 않는다는 것을 알고 있지만, datetime 정밀도를 보존하기위한 해결 방법은 무엇입니까?

감사합니다,

딘스 대일

편집 :

String Name = "created"; 
DateTime DateTimeValue = DateTime.Now; 
OdbcCommand cmd = new OdbcCommand(); 
cmd.CommandType = request.CommandType; 
cmd.CommandText = request.Command; 
OdbcParameter param; 
param = new OdbcParameter(Name, OdbcType.DateTime); 
param.Value = DateTimeValue; 
cmd.Parameters.Add(param); 

이 코드는 다음과 같은 오류 발생 : 자 여기에 원래 매개 변수 생성자 ERROR [22008]가 [마이크로 소프트] [SQL 서버 Native Client 11.0] 날짜/시간 필드 오버플로. 부분 초 정밀도는 매개 변수 바인딩에 지정된 비율을 초과합니다.

수정 프로그램과 같이 확장 된 생성자를 사용하는 것입니다

param = new OdbcParameter(Name, OdbcType.DateTime, 23, System.Data.ParameterDirection.Input, false, 0, 3, Name, DataRowVersion.Current, DateTimeValue); 

다시 한번 감사 Kumod에! 딘스 대일은

+0

당신이 이러한 오류가 발생하는 통화를 사용하는 방법의 예를 보여줄 수있다? –

답변

0

도움이 될 수 는 내가 직면 한 문제를 해결하는 방법을 알아 냈어. 나는 일찌기 배치하는 것을 의미하고 그러나 기회를 얻지 않았다. SQLDataAdapter와 SQLDataAdapter를 사용하여 결국 모든 것을 해결했습니다. 어떤 이유로 ODBCDataAdapter는 내가하려고했던 일을 좋아하지 않습니다. 어쨌든, 이것은 희망적으로 다른 누군가에게 도움이됩니다.

0

Precision의 DateTime 값을 1 초 미만으로 처리하고 싶지 않은데 최근에이 오류가 발생했습니다. 그래서 실패한 datetime 값을 다음 메소드에 제공했습니다.

public static object SetSafeDBDate(System.DateTime dtIn) 
    { 
     if (dtIn == new DateTime(0)) 
      return System.DBNull.Value; 
     else 
      return new DateTime(dtIn.Year,dtIn.Month,dtIn.Day,dtIn.Hour,dtIn.Minute,dtIn.Second); 
    } 

이 문제가 해결되었습니다.

0

Fractional second precision exceeds the scale specified in the parameter binding.

그것은 제 정밀도가 OdbcParameter 개체보다 Scale 속성을 의미한다. DateTime에 대한 형식 :

yyyy-mm-dd hh:mm-Precision = 16, Scale = 0

yyyy-mm-dd hh:mm:ss-Precision = 21, Scale = 1

- Precision = 19, Scale = 0

그리고 여기 초과 할 수 Scale 프로퍼티를 필요로하는 것들이다

yyyy-mm-dd hh:mm:ss.f (이것은 기본적으로 0입니다)

yyyy-mm-dd hh:mm:ss.ff-Precision = 22, Scale = 2

yyyy-mm-dd hh:mm:ss.fff - Precision = 23, Scale = 3

f 추가 소수 초 정밀

OdbcParameter param = new OdbcParameter("name", OdbcType.DateTime); 
param.Value = DateTime.Now; 
param.Precision = 23; 
param.Scale = 3; // <-- you need to set this property