- ベストアンサー
テキストファイルをSQLServerデータベースに保存する方法
- VB6から画像ファイルやテキストファイルをSQLServerデータベースに保存する方法を考えています。画像はimage型に保存できますが、テキストはvarbinary型に保存する方法が分かりません。
- テキストファイルをSQLServerデータベースのbinary型またはvarbinary型に保存したいです。画像ファイルの保存はできましたが、テキストファイルの保存方法がわかりません。
- VB6からテキストファイルをSQLServerデータベースに保存する方法を知りたいです。画像ファイルの保存はできましたが、テキストファイルの保存方法が分かりません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
つまり50バイト(半角50文字)しか保管できないということですね。 そこは4000とか8000とかにしないとだめですね。
その他の回答 (4)
- jamshid6
- ベストアンサー率88% (591/669)
テーブル定義を確認してください。 varbinaryの長さは指定しましたか? varbinary(1)とかになっていませんか?
お礼
varbinary(50)でした。
- jamshid6
- ベストアンサー率88% (591/669)
なるほどねー。 もう1つ可能性がありました。それはファイルサイズが8000バイトを超えているということです。 SQL Server 2000ではvarbinaryの最大長は8000です。 従って、それが理由ならば打つ手はありません(imageしかないです)。 SQL Server 2005ではvarbinary(MAX)に入れればいいんですけどね。
お礼
ファイルサイズは、2KBなんですが・・。 0KBで試しても同じエラーになってしまいました。
- jamshid6
- ベストアンサー率88% (591/669)
一番可能性が高いのは、「バイナリ形式で読みだしていない」ことです。 同じようにやっているとのことですが、テキストファイルだからテキストのままバイトで切りだしたりしていませんか? (上記の例ではst.Type=adTypeText) その場合は、全く同じエラーが起こると思います。
お礼
していないと思います。 ちなみに・・。 adTypeBinaryで先程のエラーが出てしまい、adTypeTextだと「このコンテキストで操作は許可されていません。」が出てしまいます。
- jamshid6
- ベストアンサー率88% (591/669)
この手の質問にはバージョンを記載することをお勧めします(特に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にしたところ、無事解決しました。 ご丁寧に何度も助言頂きまして、本当にありがとうございました。