2014-11-11 4 views
-1

SQL Server CE 데이터베이스 파일에서 이진 데이터를 읽으려고합니다. C#의 SQL Server CE에서 이진 데이터 읽기

는이 코드로 시도 :

string fileName = "C:\\Users\\Luca\\Desktop\\TestNoah\\TestNoah\\NOAHDatabaseCoreSqlCompact.sdf"; 
connectionString = string.Format("DataSource='{0}'; Persist Security Info=False", fileName); 

using (SqlCeConnection con = new SqlCeConnection(connectionString)) 
{ 
    con.Open(); 

    using (SqlCeCommand command = new SqlCeCommand("SELECT PublicData FROM Action",con)) 
    { 
     byte[] barrImg = (byte[])command.ExecuteScalar(); 

     List<byte> test = barrImg.ToList<byte>(); 
     string strfn = Convert.ToString(DateTime.Now.ToFileTime()); 

     FileStream fs = new FileStream("C:\\Users\\Luca\\Desktop\\TestNoah\\TestNoah\\" + strfn + ".jpg" , FileMode.CreateNew, FileAccess.Write); 
     fs.Write(barrImg, 0, barrImg.Length); 

     fs.Flush(); 
     fs.Close(); 
    } 
} 

이 코드는 이미지를 만듭니다 내가 열 수 없습니다. 어떤 아이디어? 모든

+0

이 모든 행에 대한'PublicData'를 반환합니다. 조건이 하나가 선택하지 않는 것입니다 SELECT TOP 1을 사용해 볼 수 있습니까? – Alireza

답변

0

덕분에 아래의 코드는 SqlCeCommand가 기본 키에 의해 제한된 WHERE을 가지고 위치를 결과 집합에서 단 하나의 반환 값을 예상하거나 당신이 TOP 1이없는 경우 사용하지 않아야 대신 ExecuteScalarExecuteReader를 (사용하여 당신은 여전히 ​​이미지 손상 문제가있는 경우 SELECT.

string targetDir = "C:\\Users\\Luca\\Desktop\\TestNoah\\TestNoah\\"; 
var reader = command.ExecuteReader(); 
while (reader.Read()) 
{ 
    byte[] img = (byte[])reader["PublicData"]; 
    string path = System.IO.Path.Combine(targetDir, string.Format("{0}.jpg", DateTime.Now.ToFileTime())); 
    System.IO.File.WriteAllBytes(path, img); 
} 

, 나는 그것이 당신의 소스 데이터 기록 될 전망이다.

+0

0 아래 표 수락 \t 답장을 보내 주셔서 감사합니다. 불행히도 이미지에 손상 문제가 있습니다. 소스 데이터 레코드는 소프트웨어 백업 절차의 결과입니다. 소프트웨어에서 백업을 가져올 때 모든 데이터가 복원되기 때문에 정확합니다. –

+0

데이터가 jpg이고 다른 파일 형식으로되어 있지 않습니까? –

+0

아니요, 아니에요 ... dabase (sdf)은 백업 절차의 결과이며 어떤 종류의 파일 형식을 사용하는지 전혀 알지 못합니다. –