2012-07-13 61 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

相关问题