2012-07-13 4 views
1

나는 제어 할 수없는 타사 응용 프로그램에서 테이블에 zip 파일을 저장합니다. 그러나 MySQL DB에 액세스 할 수 있습니다.C# MySQL Blob 필드 - blob에 저장된 zip 파일을 다른 테이블에 복사 할 수 없습니다.

BLOB 필드를 검색하고이 레코드를 다른 테이블에 복사하려면 SELECT 문을 수행하면됩니다. 하지만 다른 측면에서 멀리 쪽에서 blob 필드를 볼 수 있지만 zip 파일이 아닙니다. System.Byte []와 thats라고하는 텍스트 파일입니다.이 문제를 일으키는 원인에 대한 아이디어가 있습니다. 고쳐?

는 heres는 내가 아래에 무엇을 - 다시 어떤 도움이 크게 감사합니다 :)

OdbcCommand broadcastSelect = new OdbcCommand("select * from exchange where status='1' and type='UPDATE'", cloud); 
       OdbcDataReader DbReader = Select.ExecuteReader(); 
       int fCount = DbReader.FieldCount; 
       String type = ""; 
       String filename = ""; 
       byte[] data = null; 
       int status = 0; 

       while (DbReader.Read()) 
       { 
        if (DbReader.IsDBNull(0)) 
        { 
         type = "BLANK"; 
        } 
        else 
        { 
         type = (string)DbReader[0]; 
        } 
        if (DbReader.IsDBNull(1)) 
        { 
         filename = "BLANK"; 
        } 
        else 
        { 
         filename = (string)DbReader[1]; 
        } 
        if (DbReader.IsDBNull(2)) 
        { 
         data = new byte[1]; 
        } 
        else 
        { 
         data = (byte[])DbReader[2]; 
        } 
        if (DbReader.IsDBNull(3)) 
        { 
         status = 0; 
        } 
        else 
        { 
         status = (int)DbReader[3]; 
        } 

        OdbcCommand Copy = new OdbcCommand("INSERT INTO exchange(type,filename,data,status) VALUES('" + type + "','" + filename + "','" 
         + data + "','" + status + "')", local); 
        Copy.ExecuteNonQuery(); 

       } 
+0

추신 - 알고 난 문을 parametrise한다, 다만 아직 주위에있어 havent 한 : 당신이 원하는 모든 다른 테이블에 기존 항목을 복사하는 경우 – JazziJeff

+0

, 당신은 다음을 수행 불과 수 : 'OdbcCommand Copy = new OdbcCommand ("INSERT INTO 교환 (유형, 파일 이름, 데이터, 상태) 교환에서 status = '1'이고 type = 'UPDATE'", 지역); Copy.ExecuteNonQuery(); ' –

+0

문제는 그 테이블이 다른 서버에 있다는 것입니다 - 그게 단순한 경우에만) – JazziJeff

답변

3

사용 SQL 매개 변수를 이진 데이터를 삽입. 주어진 코드가 당신에게 도움이 될 것입니다 아래

OdbcParameter param = new OdbcParameter("@file", SqlDbType.Binary); 

--- 업데이트 나는 희망한다.

OdbcCommand broadcastSelect = new OdbcCommand("select * from exchange where status='1' and type='UPDATE'", cloud); 
     OdbcDataReader DbReader = Select.ExecuteReader(); 
     int fCount = DbReader.FieldCount; 
     String type = ""; 
     String filename = ""; 
     byte[] data = null; 
     int status = 0; 
     OdbcParameter param = null; 
     while (DbReader.Read()) 
     { 
      if (DbReader.IsDBNull(0)) 
      { 
       type = "BLANK"; 
      } 
      else 
      { 
       type = (string)DbReader[0]; 
      } 
      if (DbReader.IsDBNull(1)) 
      { 
       filename = "BLANK"; 
      } 
      else 
      { 
       filename = (string)DbReader[1]; 
      } 
      if (DbReader.IsDBNull(2)) 
      { 
       param = new OdbcParameter("@file", SqlDbType.Binary); 
       param.DbType = DbType.Binary; 
       param.Value = new byte[1];     
       command.Parameters.Add(param); 
      } 
      else 
      { 
       param = new OdbcParameter("@file", SqlDbType.Binary); 
       param.DbType = DbType.Binary; 
       param.Value = (byte[])dbReader[2]; 
       param.Size = ((byte[])dbReader[2]).Length; 
       command.Parameters.Add(param); 
      } 
      if (DbReader.IsDBNull(3)) 
      { 
       status = 0; 
      } 
      else 
      { 
       status = (int)DbReader[3]; 
      } 

      OdbcCommand Copy = new OdbcCommand("INSERT INTO exchange(type,filename,data,status) VALUES('" + type + "','" + filename + "',@file,'" + status + "')", local); 
      Copy.ExecuteNonQuery(); 
+0

내 무지를 변명해라. :) 그러나 검색의 값을이 매개 변수에 정확히 지정하는 방법은 무엇입니까? 덕분에 – JazziJeff

+0

또는이 링크를 사용하여 아이디어를 얻을 : http://forums.mysql.com/read.php?47,169205,169205 –

+0

그냥 알아 냈어 :) 잘 주셔서 감사합니다 녀석과 링크를위한 thaks, 내가 가질거야 이것에 대한 일반적인 내용도 역시 – JazziJeff