2012-02-13 18 views
3

tiny_tds経由でsql-serverにファイルを挿入するには?データのインポートスクリプトで

client = TinyTds.Client.new(...) 
insert_str = "INSERT INTO [...] (...) VALUE (...)" 
client.execute(insert_str).do 

これまでのところは良いです。

しかし、どのようにフィールド(SQL Server 2000)に.pdfファイルを添付することができますか?ここで

+0

'OPENROWSET'? http://msdn.microsoft.com/en-us/library/aa276850%28v=sql.80%29.aspx –

+0

バイナリデータをSQLServerに保存するだけでなく、読み込むクエリも悪夢です。これらの言語のスニペットを見たい場合は、PHPとColdFusionでこれを行いました。 – Teddy

+0

@Teddyどうかしてください。 – ohho

答えて

0

私は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に進んでください。

0

は、バイナリデータを保存するための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 
+0

Cold FusionコードとPHP-SQLSRVベースのコードスニペットも必要です。 – Teddy

+0

どのバージョンのSQLServer? 2000? – ohho

+0

SQLServer 2005、私は思います – Teddy

1

私は最近、同じ問題との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」を付加する必要があります。

関連する問題