テキストファイルをSQLServerデータベースに保存する方法

このQ&Aのポイント
  • VB6から画像ファイルやテキストファイルをSQLServerデータベースに保存する方法を考えています。画像はimage型に保存できますが、テキストはvarbinary型に保存する方法が分かりません。
  • テキストファイルをSQLServerデータベースのbinary型またはvarbinary型に保存したいです。画像ファイルの保存はできましたが、テキストファイルの保存方法がわかりません。
  • VB6からテキストファイルをSQLServerデータベースに保存する方法を知りたいです。画像ファイルの保存はできましたが、テキストファイルの保存方法が分かりません。
回答を見る
  • ベストアンサー

テキストファイルをSQLServerデータベースのbinary型またはvarbinary型に保存したい。

VB6から『画像ファイル(.bmpと.jpg)』、『テキストファイル(.txt)』を SQLServerデータベースに保存するといったものを作成しようとしています。 フィールドのデータ型は、画像をimage型、テキストをvarbinary型に設定したいと考えておりまして、画像の方は、Byte型に代入後、LoadFromFileメソッドやWriteTextメソッドで保存や取込が出来たのですが、テキストの方が、同じようにByte型に代入までは出来たものの、その先どのようにして保存(取込)をして良いか分かりません。(エラーになってしまいます。) テキストの方もデータ型をimage型にするしか方法はないのでしょうか? 何か良い方法があれば教えていただけませんでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.5

つまり50バイト(半角50文字)しか保管できないということですね。 そこは4000とか8000とかにしないとだめですね。

u-suke_2
質問者

お礼

>jamshid6様 すみません。少し勘違いもしていました。 4000にしたところ、無事解決しました。 ご丁寧に何度も助言頂きまして、本当にありがとうございました。

その他の回答 (4)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.4

テーブル定義を確認してください。 varbinaryの長さは指定しましたか? varbinary(1)とかになっていませんか?

u-suke_2
質問者

お礼

varbinary(50)でした。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

なるほどねー。 もう1つ可能性がありました。それはファイルサイズが8000バイトを超えているということです。 SQL Server 2000ではvarbinaryの最大長は8000です。 従って、それが理由ならば打つ手はありません(imageしかないです)。 SQL Server 2005ではvarbinary(MAX)に入れればいいんですけどね。

u-suke_2
質問者

お礼

ファイルサイズは、2KBなんですが・・。 0KBで試しても同じエラーになってしまいました。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

一番可能性が高いのは、「バイナリ形式で読みだしていない」ことです。 同じようにやっているとのことですが、テキストファイルだからテキストのままバイトで切りだしたりしていませんか? (上記の例ではst.Type=adTypeText) その場合は、全く同じエラーが起こると思います。

u-suke_2
質問者

お礼

していないと思います。 ちなみに・・。 adTypeBinaryで先程のエラーが出てしまい、adTypeTextだと「このコンテキストで操作は許可されていません。」が出てしまいます。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

この手の質問にはバージョンを記載することをお勧めします(特に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

u-suke_2
質問者

お礼

> jamshid6さん 早速の回答ありがとうございます。 例に書いていただいた方法を取っているのですが、varbinaryにすると 「複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。」というエラーとなってしまいます。(例の中でいうと、「rs.Fields("F1").Value = st.Read」のところで) ちなみにSQLServerは2000ですが、2005でも使用するようになります。 とりあえず、2000で動けばいいのですが・・。

関連するQ&A

  • ASPでデータベースに画像を保存

    ASP+SQLServer7.0でデータベースに画像を保存し、それを呼び出して表示できるようにしたいのですが 具体的にどうすればいいのかが分かりません。 フォルダに画像を保存することは出来ています。 image型にバイナリデータを保存するのではないかと何となく考えてはいるのですが良く分かりません。 よろしくお願いします。

  • JavaでBitmapを圧縮しないでファイル保存

    javaで、android端末で実行する画像処理のアプリを作成しています。BitmapのデータをそのままBitmap形式でファイルに保存したいのですが、良い方法はありませんか。BitmapクラスをImageクラスまたはBufferedImageクラスに変換できれば、ImageIOを使って、ファイル書き込みや読み出しが簡単にできるのですが変換のやり方が分かりません。 Bitmapデータを圧縮して、Byte列に変換してからファイル書き込みを行う方法(bmp2dataなど)は、Webにいろいろ載っていますが、実行してみると時間がかかります。Bitmapを圧縮しないでそのままByte列に変換する方法があればよいのですが、探してみましたが見つかりません。どなたか良い方法をご存知でしたらお願いします。

  • VB.NET/256色でのBMPファイル保存

    いつもお世話になっております。 VS2003/VB.NET/XP Pro SP3 画像処理にアプリケーションを開発していますが、画像処理に関しての知識が乏しくて困っています。 Image.SaveメソッドでBMPファイル保存しようと思っているのですが、フルカラー保存ではなく、256色保存の方法が分かりません。 色々と調べてみたのですが、簡単な方法が見つからず、自前で処理をするしか方法がないのでしょうか? 256色への減色保存を経験がある方からのご教授が頂けると助かります。 よろしくお願いいたします。

  • 【C#】テキストファイルを2進数で取得&配列に格納

    http://okwave.jp/qa/q7812279.html 前回の質問が分かりにくかったため、もっと詳しく書いていこうと思います。 テキストファイルを1行ずつ読み取り、それをbyte型に保存したいです。 例:test.txt 01001000 01110000 01010100 11100110 01010101 ↑のような8桁の2進数がテキストファイルに記入されています。 そのテキストファイルを読み取り、 byte配列に格納したいです。 例: byte[0]に01001000 byte[1]に01110000 byte[2]に01010100 byte[3]に11100110 上記のようにデータが格納されるよう、 ファイルを読み取り、配列に入れたいと思っています。 C#初心者のため、右も左も分からないのですが、 とりあえず、やろうとしている流れを以下に書きます。 (1)ファイルを読み込む (2)ArrayListに格納 (3)データ変換(文字列を2進数に) (4)データの出力(byte型) ArrayListでなくても構わないのですが、 他にいい方法が思いつかなかったので…。 言いたいことがぐちゃぐちゃになってきたのでまとめると、 byte[0]にファイルから読み取った1行のデータ(01001011等)を byte型で入力したい。 ということです。 分からなければ、コメントお願い致します。 文章が雑で分かりにくいかもしれませんが、回答頂けると嬉しいです。

  • ファイルの保存について

    PHPとMySqlで簡易的なCMSを作成しています。 1つの記事にタイトルと本文と画像(最大)6枚を登録します。 表示のイメージはこんな感じです。 「タイトル(テキストのみ)」 「画像1」「画像2」「画像3」 「画像4」「画像5」「画像6」 「本文(テキストのみ)」 「ワード(クリックするとダウンロード)」 「PDF(クリックするとブラウザで開く)」 ファイルのアップロードは、本文とは別の項目です。 画像の他にPDFやワードなどのファイルもアップロード可能です。 アップしたファイルのパス(files/img.jpgのようなテキスト)だけをtext型のカラムに登録しようと思っていたのですが、セキュリティ的に画像はバイナリデータとして保存した方がいいとか。。。 $img_path = '画像のパス'; $img = file_get_contents($img_path); $ext = pathinfo($img_path, PATHINFO_EXTENSION); こんな感じで、バイナリデータと拡張子を分けて登録するようです。 ファイルは、バイナリデータとして登録しアップロードされたフォルダから消す方法と パスをテキストで登録しファイルを残しておく方法とはどちらがいいのでしょうか?

    • ベストアンサー
    • PHP
  • 画像保存のファイル形式について

    ネット上から画像を保存しようとするときに、その画像が「jpg」ファイルでも、保存しようとするとどうしても「bmp」になってしまいます。 jpgとbmpの違いも良く分かってないのですが・・・ 画像を保存するときにjpgファイルとして保存するには、どこの、どの設定を変えればよろしいでしょうか? 初歩的な質問ですみません。

  • GIFイメージ ファイルの保存方法

    GIFイメージ ファイルの保存方法 あるホームページ上にある画像(GIF イメージ、プロトコル:HyperText Transfer Protocol)を PCに取り込み保存したいのですがうまくいきません。 画像を右クリックして「名前をつけて保存」するのですが、ファイルの種類の選択肢がGIFしか ないのでそれで保存しています。保存ができたかに見れるのですが、フォルダにファイルは保存 されているのですが何も見れません。ファイル形式が違うのかともさします。 他に保存できているの画像ファイルはJPEGとなっています。 どなたかご指導いただけますか。

  • テキストファイルが読み込めない

    みなさんはじめまして、下記ソースなんですが「FileInputStream fi = new FileInputStream(inputFile);」の手前までは処理が流れるの ですが、その後の処理が流れなくて困っています。 ターゲットとなる「test.txt」ファイルはHTML・JAVAソースファイル クラスファイルと同じフォルダに存在します。 特に保存先等を指定していないので、必然的に同じフォルダ内を見てフ ァイルを読み込みに行くんですけど、読み込まず、そのまま処理が流れ てしまいます。 どこかやり方がいけないところがあるんでしょうか? public String FileInput(){ byte data[] = new byte[16]; String number = ""; try { File inputFile = new File("test.txt"); FileInputStream fi = new FileInputStream(inputFile); /* データを読み込み */ if(fi.read(data)== 16){       /* 0バイト目から9バイト目までを読み込み */ if(new String(data,0,9).equals("010105502")){         /* 0バイト目から16バイト目までをnumberに代入 */ number = new String(data,0,16); } } fi.close(); } catch(FileNotFoundException e){ e.printStackTrace(); } catch(IOException e){} return(number); }

    • ベストアンサー
    • Java
  • テキストファイルのコピー

    あるデータ(数値が入ったデータ)をテキストファイルで保存しました。 で、これと全く同じテキストファイルを500個作りたいです。 そうなるとコピーして貼りつければ良いのですが、500個も作りたいので、1個1個コピーして貼りつけしたらかなりの時間がかかります。 いっぺんに1つのテキストファイルを500個コピーして全く同じテキストファイルを500個にしたい時はどうすればいいでしょうか? やり方ありますか? 詳しい方教えてください。

  • テキストデータをSQLServerに取込むには

    列区切なし、改行コードなしの固定長データをSQLにコンバートしたいのですが、上手く行かず困っています。 (ファイル形式:テキストファイルバイナリ固定長)  ・試した方法   BULK INSERT     添付画像のようなデータをSQLサーバに取り込みたいのですが  上手く読み込みができません。  添付画像のようなデータは取り出せないのでしょうか?   宜しくお願いします。。