MySQL中有表issue:
mysql> desc issues;
+--------------+--------------+------+-----+---------+----------------+
¦ Field ¦ Type ¦ Null ¦ Key ¦ Default ¦ Extra ¦
+--------------+--------------+------+-----+---------+----------------+
¦ issueid ¦ int(11) ¦ ¦ PRI ¦ NULL ¦ auto_increment ¦
¦ categoryid ¦ int(11) ¦ ¦ ¦ 0 ¦ ¦
¦ title ¦ varchar(255) ¦ ¦ ¦ ¦ ¦
¦ postuserid ¦ int(11) ¦ ¦ ¦ 0 ¦ ¦
¦ postnickname ¦ varchar(25) ¦ YES ¦ ¦ NULL ¦ ¦
¦ posttime ¦ datetime ¦ YES ¦ ¦ NULL ¦ ¦
¦ content ¦ blob ¦ YES ¦ ¦ NULL ¦ ¦
+--------------+--------------+------+-----+---------+----------------+
7 rows in set (0.13 sec)
Part of source:
function listCategory() {
var cnn = Application("forum_cnn");
var cmd = new ActiveXObject("ADODB.Command");
cmd.ActiveConnection = cnn;
cmd.CommandText = "select * from issues order by issueid desc limit 15";
rs = cmd.Execute(tmp,tmp,adExecuteStream);
while (!rs.EOF) {
Response.Write("
1<issue>");
2
3for (var i = 0; i < 7; i ++) {
4Response.Write("<" + rs.Fields.Item(i).Name + ">" + rs.Fields.Item(i).Value + "<!--" + rs.Fields.Item(i).Name + "-->\r\n");
5}
6Response.Write("</issue>
");
rs.MoveNext();
}
rs.Close();
}
Result:
1<issue><issueid>12</issueid>
2<categoryid>1</categoryid>
3<title>OK?</title>
4<postuserid>18</postuserid>
5<postnickname>Kodd</postnickname>
6<posttime>Sat Sep 7 15:32:21 UTC+0800 2002</posttime>
7<content></content>
8</issue>
1<issue><issueid>11</issueid>
2<categoryid>1</categoryid>
3<title>OK?</title>
4<postuserid>18</postuserid>
5<postnickname>Kodd</postnickname>
6<posttime>Sat Sep 7 15:28:38 UTC+0800 2002</posttime>
7<content></content>
8</issue>
实际上,content是有内容的,但我读不出来,试过rs.Fields.Item(6).GetChunk(65535),无效。实在无法。
不知道是不是mysql odbc的不完善性还是有别的窍门?
请各位赐教。
---------------------------------------------------------------
see
MySQL BLOB columns and Visual Basic 6
http://www.dynamergy.com/mike/articles/blobaccessvb.html
---------------------------------------------------------------
var conn = new ActiveXObject("ADODB.Connection");
conn.ConnectionString = "..............";
conn.CursorLocation = 3;
conn.Open();
var rs = new ActiveXObject("ADODB.Recordset");
var mystream = new ActiveXObject("ADODB.Stream");
rs.Open("Select YourBlobColumn from YourTable WHERE Whatever....",conn);
mystream.Type = 1;
mystream.Open();
mystream.Write(rs.Fields("YourBlobColumn"));
mystream.SaveToFile ("c:\\newimage.gif", 2);
mystream.Close();
rs.Close();
conn.Close();
---------------------------------------------------------------
先谢 saucer(思归)。
上述方法,可以成功写文件,内容正确,只是我想直接得到blob的内容(string)到一个字符串变量中,用写文件的方法无法直接得到(除非协议次文件,再读一次文件)。
最后,只有采用权宜之策:
1<script language="JavaScript" src="adojavas.inc"></script>
1<script>
2var conn = new ActiveXObject("ADODB.Connection");
3conn.ConnectionString = "DSN=forum";
4conn.CursorLocation = 3;
5conn.Open();
6
7var rs = new ActiveXObject("ADODB.Recordset");
8var xmlDom = new ActiveXObject("MSXML.DOMDocument");
9
10rs.Open("Select content from issues WHERE issueid=12",conn);
11
12rs.Save(xmlDom, adPersistXML);
13document.write(xmlDom.xml.replace(/</g, "<"));
14
15rs.Close();
16conn.Close();
17
18</script>
result:
1<xml xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:z="#RowsetSchema"> <s:schema id="RowsetSchema"> <s:elementtype content="eltOnly" name="row"> <s:attributetype name="content" rs:maydefer="true" rs:nullable="true" rs:number="1" rs:writeunknown="true"> <s:datatype dt:maxlength="65535" dt:type="bin.hex" rs:long="true"></s:datatype> </s:attributetype> <s:extends type="rs:rowbase"></s:extends> </s:elementtype> </s:schema> <rs:data> <z:row content="3c2540206c616e67756167653d224a6176615363726970742220253e0d0a3c253d223c212d2d22253e3c736372 6970743e66756e6374696f6e20577269746528737472297b646f63756d656e742e777269746528737472293b7d2f2f3c253d222d2d3e22 253e203c252066756e6374696f6e20577269746528737472297b526573706f6e73652e577269746528737472293b7d20253e3c250d0a76 61722053797374656d3d6e6577204f626a6563743b0d0a53797374656d2e57726974653d57726974653b0d0a2f2f253e3c253d223c212d 2d22253e3c2f7363726970743e3c253d222d2d3e22253e0d0a3c212d2d4d45544144415441204e414d453d224d6963726f736f66742041 6374697665582044617461204f626a6563747320322e35204c6962726172792220545950453d22547970654c69622220555549443d227b 30303030303230352d303030302d303031302d383030302d3030414130303644324541347d222d2d3e0d0a0d0a"></z:row> </rs:data> </xml>
看到数据是十六进制的数字。呵呵,暂且用转换这些十六进制的数字得到原来string的方法了。
问题至此结。