在数据导入脚本中:
client = TinyTds.Client.new(...)
insert_str = "INSERT INTO [...] (...) VALUE (...)"
client.execute(insert_str).do
到现在为止还挺好。
但是,如何将.pdf
文件附加到varbinary
字段中(SQL Server 2000)?
在数据导入脚本中:
client = TinyTds.Client.new(...)
insert_str = "INSERT INTO [...] (...) VALUE (...)"
client.execute(insert_str).do
到现在为止还挺好。
但是,如何将.pdf
文件附加到varbinary
字段中(SQL Server 2000)?
我最近遇到了同样的问题,并且使用 activerecord 并没有真正适应我想做的事情......
因此,不使用 activerecord:
client = TinyTds.Client.new(...)
data = "0x" + File.open(file, 'rb').read.unpack('H*').first
insert_str = "INSERT INTO [...] (...) VALUE (... #{data})"
client.execute(insert_str).do
要发送正确的 varbinary 数据,您需要读取文件,将其转换为十六进制字符串,unpack('H*').first
并在结果前加上“0x”。
这是保存二进制数据的 PHP-MSSQL 代码:
mssql_query("SET TEXTSIZE 2147483647",$link);
$sql = "UPDATE UploadTable SET UploadTable_Data = ".varbinary_encode($data)." WHERE Person_ID = '".intval($p_id)."'";
mssql_query($sql,$link) or
die('cannot upload_resume() in '.__FILE__.' on line '.__LINE__.'.<br/>'.mssql_get_last_message());
function varbinary_encode($data=null) {
$encoded = null;
if (!is_null($data)) {
$a = unpack("H*hex", $data);
$encoded = "0x";
$encoded .= $a['hex'];
}
return $encoded;
}
这是获取二进制数据的 PHP-MSSQL 代码:
mssql_query("SET TEXTSIZE 2147483647",$link);
$sql = "SELECT * FROM UploadTable WHERE ID = 123";
$db_result = mssql_query($sql,$link);
// work with result like normal
我最终使用了activerecord:
require 'rubygems'
require 'tiny_tds'
require 'activerecord-sqlserver-adapter'
..
my_table.create(:file_name => "abc.pdf", :file_data => File.open("abc.pdf", "rb").read)
对于 SQLServer 2000 支持,请选择 2.3.x 版本activerecord-sqlserver-adapter
gem。