2012-07-13 65 views
1

我有一個zip文件存儲在一個由我無法控制的第三方應用程序的表中。不過我可以訪問MySQL數據庫。C#MySQL Blob字段 - 無法將存儲在blob中的zip文件複製到另一個表中

我想要做的是做一個SELECT語句來檢索一個blob字段並將此記錄複製到另一個表中。但另一方面,我確實看到遠端的blob字段,但它不是一個zip文件,它是一個文本文件,上面寫着System.Byte [],這就是它 - 任何人對於什麼導致這個問題以及如何修理它?

繼承人什麼,我有如下 - 再次任何幫助非常感謝:)

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

PS - 知道我應該parametrise的聲明,只是還沒有得到解決它尚未:) – JazziJeff 2012-07-13 12:05:06

+0

如果你想要做的是對現有條目複製到另一臺,你可以只做到以下幾點: 從本地='1'和類型='UPDATE'「,本地);從交換的地方選擇(類型,文件名,數據,狀態)的OdbcCommand複製=新的OdbcCommand(」插入交換(類型,文件名,數據,狀態)。 Copy.ExecuteNonQuery();' – 2012-07-13 12:17:25

+0

問題是該表存在於另一臺服務器上 - 如果只有它那麼簡單;) – JazziJeff 2012-07-13 12:20:24

回答

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 2012-07-13 12:40:23

+0

或使用此鏈接的想法:http://forums.mysql.com/read.php?47,169205,169205 – 2012-07-13 12:50:03

+0

只是想通了:)很高興,謝謝你們的鏈接,我會有一般閱讀 – JazziJeff 2012-07-13 12:59:16

相關問題