2013-07-16 1 views
3

DataTable에서 binarydata를 바이트 배열로 가져 오려고합니다. 는하지만 아래의 코드 유형 '바이트 []'데이터 테이블의 이진 데이터 할당

DataTable dataTable = DB.GetData("SELECT * FROM StackOverflow WHERE Id = '" + id + "'"); 

byte[] byteArray = null; 


if(dataTable.Rows.Count > 0) 
{ 
    byteArray = dataTable.Rows[0]["BinaryData"].ToString()); 
} 

가 어떻게 StackOverflow의 테이블에서 binaryData을 얻을 수있는 대상 소스 유형 '문자열을'변환 할 수 없습니다

을 반환?

StackOverflow table 
---------------------- 
Id int 
BinaryData varbinary(max) 
+1

당신이 당신의 테이블 스키마를 게재 할 수 있습니까? – Raptor

+4

문자열을 원하지 않을 때'ToString'을 무엇이라고 부릅니까? 그리고 그런 식으로 SQL을 구축하지 마십시오 ... 대신 매개 변수화 된 SQL을 사용하십시오. –

+0

당신은 맞습니다 @ 존 키스톤. 조언 해 주셔서 감사합니다. –

답변

4

당신이 .ToString()를 호출 할 경우, 당신은 문자열를 얻을 것이다; 대신, 단순히 캐스트 :

byteArray = (byte[])dataTable.Rows[0]["BinaryData"]; 

그러나, 여기에 DataTable에 대한 필요가 없습니다. 개인적으로, 난 그냥 사용했던 : 단정 사용하거나 ExecuteScalar ADO.NET과는

var byteArray = conn.Query<byte[]>(
    "SELECT BinaryData FROM StackOverflow WHERE [email protected]", 
    new {id}).FirstOrDefault(); 

:

byte[] byteArray; 
using(var cmd = conn.CreateCommand()) { 
    cmd.CommandText = "SELECT BinaryData FROM StackOverflow WHERE [email protected]"; 
    cmd.Parameters.AddWithValue("id",id); 
    byteArray = (byte[])cmd.ExecuteScalar(); 
} 
+0

Marc Gravell에 감사드립니다. –

+0

첫 제안으로 인해 예기치 않은 토큰 오류가 발생했습니다. 나는 그것을 다음과 같이 써야만했다 : [byte []] byteArray = dataTable.Rows [0] [ "BinaryData"]; – blizz