EF4와 DB2 LUW 및 iSeries를 사용하는 .Net 어플리케이션이 있습니다..Net에서 iSeries DATE/TIME/TIMESTAMP 컬럼을 갱신하십시오.
DB2에서 명령을 실행할 때 원본 명령을 새로운 iDB2Command에 복제하고 매개 변수를 복사 한 다음 실행합니다. 우리가 DATE
칸에 올 때까지 모두 잘 작동합니다. 이 시점에서 AS400 또는 드라이버는 아래로 떨어지는 것처럼 보입니다. DbTypes.DateTime
이고 DateTime 개체가 있지만 DATE
이라는 매개 변수를 가져옵니다.
반환 된 오류 (LUW)는 다음과 같습니다. AS400 (v6r1m0)이 코드는 다음과 같이 보입니다
ERROR [22008] [IBM] CLI0114E Datetime field overflow. SQLSTATE=22008
약간 다른 표현을 반환합니다 (완전히 무관 iSeries의/DB2-LUW이다) 그래서
// all generic System.Data classes, no iDB2Connection datatype. The driver isn't even
// installed on dev/build machines at this point. We rely on .Net reading the connection
// string from App.config to create the proper DB Driver (db2-luw or iSeries)
DbConnection c = ... get connection from somewhere...
DbCommand cmd = c.CreateCommand();
var p = cmd.CreateParameter();
p.ParamterName = "V_XXX_XXX";
p.DbType = DbTypes.DateTime;
p.Value = DateTime.Now;
cmd.AddParamter(p);
...
...
여기에 잘못된 것이 있습니까?
LUW의 경우 매개 변수를
편집 : 로컬 테스트 코드 (예 : DbTypes.DateTime
으로 보내면 문제가 없습니다.
Now.Date
)에서 잘린 날짜를 보내고 있기 때문에 LUW에서 정상적으로 작동했습니다. 일반 DateTime.Now
은 이론적으로는 어떤 System.DbTypes
로 변환, 변환 시간에 이야기 할 수 있도록
는 또한, 우리는, 유형에 전체 메타 데이터가)이 AS400에서 맘에 잘림 오류와 함께 실패합니다. 우리는 그것이 근본적인 문제가 아니라 모든 것이 끝나기를 바랄 뿐이다.
** 솔루션 **
감사합니다 @ 마이크 - 윌리스, 우리는 단지 명령을 생성하기 전에 열을 확인하고 필요한 경우 수동 절단 작업을 수행합니다.
// get the db2 column type from our model metadata, because in .net it is all just DateTime
cmd.AddParamter("@MyDateColumn", FixParam(dateObject, metatdata.ColumnType);
// fix up different types of parameters. real version does a lot more validation
public object FixParam(object value, string db2columnType) {
if (db2columnType == "date") return ((DateTime)value).Date;
...
return value;
}
감사합니다. 모든 DB2 사용자.
iSeries DLL을 사용하지 않으므로 'iDB2DbType' 구조에 액세스 할 수 없습니다. 나는 내일 아침 클라이언트 사이트에서 그것을 테스트 할 것인데, 여기서 우리는 생생한 호흡에 접근 할 수 있습니다. iSeries : D Looks Promsing. 우리는'DbTypes.DateTime'을 남겨 두지 만, 필요하다면'DbTypes.Date' 또한 변경할 수 있습니다. 디버깅 시간 : D –