2016-12-27 2 views
0

이것은 우리의 데이터는 DB에 보관하는 방법입니다SqlServer의 16 진수 데이터는 암시 적으로 C#의 bytearray로 변환됩니다. 데이터를 그대로 유지하는 방법?

enter image description here

내가 데이터 테이블의 DB 테이블을 얻고 통해 반복하고있다. 동일한 데이터가 암시 적으로 바이트 배열로 변환됩니다. 이 디버깅 세션에서입니다 :

enter image description here

대로 내가 데이터를합니다. 나는 그것을 파일에 쓸 것이다. 현재 row.ItemArray[0]으로 bytearray에 액세스 할 수 있습니다. 값은 {byte[70]}입니다. row.ItemArray[0]에 색인을 사용할 방법이 없습니다. row.ItemArray[0][0]은 (는) 86을주지 않습니다. 어쨌든 86이 필요하지 않습니다. 파일에 row.ItemArray[0]을 쓰면, 보입니다. System.Byte[]

+0

데이터 유형은 바이너리이며, SSMS는 쿼리 결과 창에 16 진수로 표시합니다. – Crowcoder

+0

C#에서 16 진수 문자열로 이진 배열을 변환하는 방법은? – Jude

+0

예,하지만 파일에 무엇을 쓰려고합니까? 바이트 배열은 이미 파일에 쓸 필요가 있기 때문입니다. – Crowcoder

답변

0

왜 바이너리 데이터를 문자열로 변환합니까? 그것은 결코 작동하지 않을 것입니다. 시도해보십시오

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.IO; 


namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.dat"; 
     static void Main(string[] args) 
     { 
      DataTable datatable = new DataTable(); //just for testing, use your current table 
      FileStream stream = new FileStream(FILENAME, FileMode.Create); 
      BinaryWriter writer = new BinaryWriter(stream, Encoding.UTF8); 
      foreach (DataRow row in datatable.AsEnumerable()) 
      { 
       writer.Write(row.Field<byte[]>(0)); 
      } 
      writer.Flush(); 
      writer.Close(); 
     } 

    } 

} 
+0

OP는 파일의 데이터가 SSMS와 똑같이 보이기를 원한다는 것을 (주석으로) 말합니다. – Evk

+0

16 진수 문자열이 아닙니다! 그것은 0x .........로 시작합니다. 게시 한 코드는 데이터를 변경하지 않으며 모든 데이터 유형에서 작동합니다. – jdweng

+0

SSMS 디스플레이에서 16 진수 문자열 ("0x"로 표시되었지만 문제가되지 않음)을 의미하며 OP는 정확히 텍스트 파일 (데이터베이스의 바이트 배열 임에도 불구하고)에서 동일하게 보이길 원합니다. – Evk