2016-10-31 35 views
1

私はシステムを開発中です。私は通常、Visual Studio 2013を使用してデータベースをコーディングしてデータベースにデータを追加します。VB.NETを使用してデータベースに画像を保存する

Select * from tbl_login where loginID = '" & TextBox1.Text & "' 

これは文字列では機能しますが、イメージでは機能しません。私はPictureBoxから画像を保存するために何を使用すべきか分かりません。

さらに、何が良いですか?データ型としてIMAGEまたはVARBINARY(MAX)を使用していますか?

ありがとうございます!

+1

[SQLインジェクションアラート](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - SQL文を連結しない** SQLインジェクションを避けるために**パラメータ化クエリ**を使用する –

+1

'ntext'、' text'、および 'image'データ型は、将来のバージョンのSQL Serverで削除されます。新しい開発作業でこれらのデータ型を使用しないようにし、現在使用しているアプリケーションを変更することを計画します。代わりに 'nvarchar(max)'、 'varchar(max)'、 'varbinary(max)'を使用してください。 [詳細はこちら](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –

答えて

3

私の助言は、データベースに画像を保存しないことです。代わりに、イメージのパスを保存し、実際のイメージをサーバーのどこかに格納することができます。画像データを保存するとデータベースのサイズが大きくなる可能性があるためです。

イメージデータをデータベースに保存する場合は、varbinary(max)を選択できます。データ型IMAGEは推奨されていません。 IMAGEデータ型の使用は避けてください。スクリプト言語を使用してイメージデータをバイナリ形式に変換し、データベースに格納する必要があります。

もう一つのアドバイスは、SQLインジェクションによる攻撃の可能性があるかもしれません

Select * from tbl_login where loginID = '" & TextBox1.Text & "' 

のようなフロントエンドから使用する追記型クエリ建物いけないです。

+0

保存されているパスであってもイメージを取得できますか? – ABCDE

+0

はい..あなたはhtmlアンカータグのようなパスでイメージを呼び出す必要があります。 Webでasp.netについてもっと知ることができます。 –

1

もう1つの良い解決策は、ファイルテーブルを使用して、ユーザーが両方の世界を最大限に活用できるようにすることです。 Ex- 非トランスナショナルストリーミングアクセスとファイルへのインプレース更新。 階層構造のファイルにアクセスします(ファイルシステムと同様)。 作成された日付などのファイル属性を保存およびクエリする機能。 Windowsファイルおよびディレクトリ管理APIとの互換性。 他のSQL Server機能との互換性。

関連する問題