쿼리 할 수 있어야하는 타사에서 생성 한 여러 DBF 파일이 있습니다. 모든 열 유형이 문자로 정의 되었기 때문에 문제가 발생하지만 일부 필드의 데이터에는 실제로 이진 데이터가 포함되어 있습니다. 이 필드를 OleDbDataReader를 사용하여 문자열이나 문자 배열로 읽으려고하면 InvalidCastException이 발생하지만 이진 값으로 읽거나 적어도 읽었을 때 캐스팅/변환 할 수 있어야합니다. . 실제로 텍스트가 포함 된 열은 예상대로 반환됩니다.ADO.NET을 사용하여 잘못 정의 된 열 데이터 형식이있는 DBF 파일을 읽으려면 어떻게해야합니까?
예를 들어 첫 번째 열은 길이가 2 바이트 인 문자 필드로 정의되지만 필드는 16 비트 정수를 포함합니다.
다음 테스트 코드를 작성하여 첫 번째 열을 읽고 적절한 데이터 형식으로 변환했지만 값이 올바르게 나오지 않습니다.
데이터베이스의 첫 번째 행의 첫 번째 열에 17365 (0x43D5) 값이 있습니다. 다음 코드를 실행하면 끝나는 것은 17215 (0x433F)입니다. 데이터 판독기에서 반환 한 문자열에서 바이트를 가져 오기 위해 ASCII 인코딩을 사용해야한다는 확신이 있습니다. 그러나 필요한 형식으로 값을 가져 오는 또 다른 방법은 확실하지 않습니다. 내 자신의 DBF 리더를 작성하고 절대적으로해야하지 않는 한 내가하고 싶지 않은 ADO.NET을 모두 우회하십시오. 어떤 도움이라도 대단히 감사하겠습니다.
byte[] c0;
int i0;
string con = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ASTM;Extended Properties=dBASE III;User ID=Admin;Password=;";
using (OleDbConnection c = new OleDbConnection(con))
{
c.Open();
OleDbCommand cmd = c.CreateCommand();
cmd.CommandText = "SELECT * FROM astm2007";
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
c0 = Encoding.ASCII.GetBytes(dr.GetValue(0).ToString());
i0 = BitConverter.ToInt16(c0, 0);
}
dr.Dispose();
}
감사합니다. Advantage .NET 데이터 제공 업체에게 – figabytes
을 줄 것입니다. @Jason : 전체 공개의 정신에서 Advantage 제품 라인의 개발자 중 한 명이라고 언급해야합니다. 그러나 로컬 엔진을 사용하는 데는 비용이 들지 않습니다. (잘하면 내 방식이 좋지는 않습니다.) 내가 그것을 테스트하는 데 사용되는 연결 문자열 정보로 답변을 업데이 트합니다. –
그건 속임수 였어. 고마워요!BTW, 내가 그 부분에 어려움을 겪고 있었기 때문에 연결 문자열을 게시하게되어 기쁩니다. – figabytes