1

我有一个 zip 文件由我无法控制的第三方应用程序存储在表中。但是,我确实可以访问 MySQL 数据库。

我想要做的是执行一个 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();

                }
4

1 回答 1

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();
于 2012-07-13T12:27:44.977 回答