:tiny_tds経由でsql-serverにファイルを挿入するには?データのインポートスクリプトで
client = TinyTds.Client.new(...)
insert_str = "INSERT INTO [...] (...) VALUE (...)"
client.execute(insert_str).do
これまでのところは良いです。
しかし、どのようにフィールド(SQL Server 2000)に.pdf
ファイルを添付することができますか?ここで
:tiny_tds経由でsql-serverにファイルを挿入するには?データのインポートスクリプトで
client = TinyTds.Client.new(...)
insert_str = "INSERT INTO [...] (...) VALUE (...)"
client.execute(insert_str).do
これまでのところは良いです。
しかし、どのようにフィールド(SQL Server 2000)に.pdf
ファイルを添付することができますか?ここで
私は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に進んでください。
は、バイナリデータを保存するための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を使用しては本当に私は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
で16進数の文字列に変換し、結果に「0x」を付加する必要があります。
'OPENROWSET'? http://msdn.microsoft.com/en-us/library/aa276850%28v=sql.80%29.aspx –
バイナリデータをSQLServerに保存するだけでなく、読み込むクエリも悪夢です。これらの言語のスニペットを見たい場合は、PHPとColdFusionでこれを行いました。 – Teddy
@Teddyどうかしてください。 – ohho