如何使用MySql和Classic ASP将BLOB字段/记录从一个DB复制到另一个DB

时间:2017-01-04 21:44:56

标签: mysql asp-classic blob

我有以下问题:

我在2个不同的服务器上有2个MySql DB,只有一个表,每个表都有相同的表结构。这些DB表在每个记录中都有许多BLOB字段(WAV格式的录音),还有一个数字记录id。

我使用的是经典的ASP(VB)并且无法改变,因为整个系统都在经典的asp中(此外我还不知道另一种语言/系统)。我知道它已经老了,但现在需要解决这个问题。

我需要从DB1读取某条记录(让我们说IdNum = 100的记录),包含完整数据(包括BLOB字段)...并在DB2表中保存(插入)相同的完整记录(包括BLOB字段)。

我尝试了正常的插入但得到了#34;类型不匹配" sqlRec2声明行中的错误。

有人可以帮我解决这个问题吗?谢谢!!

我的代码如下(recwav01,02和03是BLOB字段,"注释"是txt字段):

Set my_conn = createobject("ADODB.Connection")
Set my_conn2 = createobject("ADODB.Connection")

my_conn.open = "DRIVER={MySQL ODBC 5.3 Unicode Driver};"_
& "SERVER=yyy.yyy.yyy.yyy;PORT=3306;"_
& "DATABASE=dbremote01;"_
& "UID=root;PWD=password01; OPTION=35;"

my_conn2.open = "DRIVER={MySQL ODBC 5.3 Unicode Driver};"_
& "SERVER=xxx.xxx.xxx.xxx;PORT=3306;"_
& "DATABASE=dbremote02;"_
& "UID=root;PWD=password02; OPTION=35;"

sqlRec = "SELECT * FROM table01 WHERE idnum>=100 AND idnum <=120;"
Set rs = my_conn.Execute(sqlRec)

DO WHILE NOT rs.EOF
  sqlRec2 = "INSERT INTO table02 (idnum,notes,recwav01,recwav02,recwav03) VALUES (" & _
  rs("idnum") & ", '" & rs("notes") & "', '" & rs("recwav01") & "', '" & rs("recwav02") & _
  "', '" & rs("recwav03") & "');"
  my_conn2.Execute(sqlRec2)
  rs.movenext
LOOP

1 个答案:

答案 0 :(得分:-1)

商Yipes!你有一个难题。 21世纪的语言和运行时很难处理大型BLOB;他们经常需要某种流协议来将它们从服务器传输到程序RAM。而且你正在处理一个20多年前的运行时间,这个运行时间多年来一直没有更新。根据您的BLOB的大小,您的经典ASP问题的答案可能会变成您不能做到这一点

与此同时,您可以尝试使用Base 64编码将二进制文件转换为文本字符串。这对SQL语句可以解决这个问题。

阅读你的表格:

 sql1 = "SELECT  idnum, notes, TO_BASE64(recwav01) w1, TO_BASE64(recwav02) w2, TO_BASE64(recwav03) w3; "

然后,INSERT行,这样的语句。

sql2 = _
"INSERT INTO table02 (idnum, notes, recwav01, recwav02, recwav03) " & _
   "VALUES (" & rs("idnum") & ", '" & rs("notes") & "', " & _
            "FROM_BASE64('" &  rs("w1") & "'), " & _
            "FROM_BASE64('" &  rs("w2") & "'), " & _
            "FROM_BASE64('" &  rs("w3") & "')); " 

(对此级联文字字符串的正确性不作任何保证。警告如果您的notes列值包含'字符,则此在你脸上爆炸。)

这里的想法是将您的二进制数据转换为DBMS中的文本字符串,并在出路时将这些字符串转换回二进制文件。

如果事实证明这不起作用,因为BLOB对于经典asp来说太大了,你可以尝试使用mysqldump将数据提取到文本文件,然后将其加载到新数据库中。