문제

려고 노력했습을 사진에 저장한 액세스는 데이터베이 OLE 체에서 PictureBox C#windows 응용 프로그램입니다.

이 이 작업을 수행하는 코드는 아래에 제시되:

        string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Rajesh\SampleDB_2003.mdb;";
        OleDbConnection oConn = new OleDbConnection(connString);
        oConn.Open();
        string commandString = "select * from employee where id = " + id + "";
        OleDbCommand oCmd = new OleDbCommand(commandString, oConn);
        OleDbDataReader oReader = oCmd.ExecuteReader(CommandBehavior.SequentialAccess);

        while (oReader.Read())
        {
            txtID.Text = ((int)oReader.GetValue(0)).ToString();
            txtName.Text = (string)oReader.GetValue(1);
            txtAge.Text = ((int)oReader.GetValue(2)).ToString();
            txtType.Text = (string)oReader.GetValue(3);
            byte[] imageBytes = (byte[])oReader.GetValue(4);

            MemoryStream ms = new MemoryStream();
            ms.Write(imageBytes, 0, imageBytes.Length);
            Bitmap bmp = new Bitmap(ms);
            pbPassport.Image = bmp;
        }

를 실행하면 위의 코드는'매개 변수가 유효하지 않은'예외가 발생 라인에서:

Bitmap bmp = new Bitmap(ms)

에서 예외 메시지,그것은 분명하다는'ms'에서는 포맷하지 않은 알아볼.어떤 제안을 얻는 과거 이?

도움이 되었습니까?

해결책

바이트 스트림은 어떻게 든 손상되었습니다. 나는 당신의 정확한 방법을 시도했지만 대신 파일의 PNG 데이터로 바이트 배열을 채웠습니다.

데이터베이스에서 하나의 스트림과 데이터베이스의 이미지 소스 인 파일에서 두 개의 스트림을 작성하는 것이 좋습니다. 그런 다음 바이트를 바이트로 비교하십시오. 1 바이트의 Diffrence가있는 경우 데이터베이스 이미지 데이터가 손상되었습니다.

다른 팁

불행히도 나는 당신에게 좋은 대답이 없지만, 시도했을 때 나는 같은 결과를 얻었다고 말할 수 있습니다. 때로는 바이트 어레이의 처음 78 바이트를 건너 뛰는 것이 작동했지만 때로는 그렇지 않았습니다.

Ole Object Datatype은 필드에 어떤 종류의 헤더를 저장하므로 액세스가 어떤 유형의 Ole 객체인지 알 수 있기 때문입니다. 나는이 헤더가 멈추고 실제 데이터가 시작된 곳을 정확히 해결할 수있는 신뢰할 수있는 방법을 찾을 수 없었지만, 또한 포기 했으므로 행운을 빕니다 :)

AccessHDR에 대한 Google 검색을 수행하십시오. accesshdr.cpp 및 accesshdr.h에 대한 참조를 찾을 수 있습니다. 이것은 헤더없이 스트림을 추출하는 데 필요한 것을 설명합니다.

을 읽을 수 없습니다 OLE 개체합니다.사실,그것은 나쁜 유지하는 연습을 사진으로 OLE 체에서 데이터베이스입니다.

그것이 선호하는 em 로 BLOB 체 또는 경로와 파일에 저장합니다.AccessImagine 모두 처리할 수 있는 시나리오에 대한 MS 액세스하고 있습니다.여기에서 다운로드 하실 수 있습니다- http://access.bukrek.net

당신은 시도 할 수 있습니다:

pbPassport.Image = Image.FromStream(ms);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top