なるほどねー。
もう1つ可能性がありました。それはファイルサイズが8000バイトを超えているということです。
SQL Server 2000ではvarbinaryの最大長は8000です。
従って、それが理由ならば打つ手はありません(imageしかないです)。
SQL Server 2005ではvarbinary(MAX)に入れればいいんですけどね。
この手の質問にはバージョンを記載することをお勧めします(特にLOBは2005と2000で大幅に違います)。
image & varbinaryということで、SQL Server 2000でいいですか?
テキストファイルをtext型でなく敢えてバイナリ保管する理由はなんですか?セキュリティですか?
ADO.Streamを使って書き込めば、imageでもvarbinary(8000)でも、textでも問題なく読み書きできます。
バイナリの最もシンプルな例は以下です。
Sub test()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim st As New ADODB.Stream
cn.Open "接続文字列"
st.Open
st.Type = adTypeBinary
st.LoadFromFile "C:\TextFile.txt"
rs.Open "SELECT * FROM テーブル", cn, adOpenKeyset, adLockOptimistic
rs.AddNew
rs.Fields("F1").Value = st.Read
rs.Update
rs.Close
st.Close
cn.Close
Set st = Nothing
Set rs = Nothing
Set cn = Nothing
End Sub
質問者
お礼
> jamshid6さん
早速の回答ありがとうございます。
例に書いていただいた方法を取っているのですが、varbinaryにすると
「複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。」というエラーとなってしまいます。(例の中でいうと、「rs.Fields("F1").Value = st.Read」のところで)
ちなみにSQLServerは2000ですが、2005でも使用するようになります。
とりあえず、2000で動けばいいのですが・・。
お礼
>jamshid6様 すみません。少し勘違いもしていました。 4000にしたところ、無事解決しました。 ご丁寧に何度も助言頂きまして、本当にありがとうございました。