もちろん、特定のニーズ (セキュリティなど) により、画像やファイルをデータベースに保存する必要がある場合は、特にファイルが比較的大きい場合、多くの人はデータベースにファイルをバイナリ形式で保存することを推奨しません。ファイル内のファイルへのアクセスは次のように構成されます (考え方は SQL Server2000 でのアクセスと同じです。保存の場合は、画像またはファイルのバイナリ バイト ストリームがデータに保存されます。読み取りの場合は、ファイル内の対応するフィールドが格納されます)。データベースはバイトデータに読み取られてから出力されます):
1. TOAD または SQLPlus でデータベース テーブルを作成します。
1テーブルTEST_TABLEの作成
2(
3 ID VARCHAR2(36 バイト)、
4 名前 VARCHAR2(50 バイト)、
5枚の写真ブロブ
6)
7
2. 新しい ASPX ページを作成し、ページに FileUpload コントロールを配置し、fileUp という名前を付け、btnSave (保存) と btnRead (読み取り) という 2 つのボタンを配置します。
3. btnSave イベントで次のコードを実行して、画像またはファイルを保存します。
画像 (ファイル) を Oracle に保存する
1StringBuilder sbSQL = new StringBuilder("Test_Table(ID,Name,Photo) の値(:ID,:Name,:Photo) に挿入");
2 OracleConnection cn = 新しい OracleConnection(strCn);
3 OracleCommand cmd = cn.CreateCommand();
4 cmd.CommandText = sbSQL.ToString();
5 cmd.Parameters.Add(":ID", OracleType.VarChar, 36).Value = Guid.NewGuid().ToString();
6 cmd.Parameters.Add(":Name", OracleType.VarChar, 50).Value = fileUp.FileName;
7 int intLen = fileUp.PostedFile.ContentLength;
8 byte[] pic = 新しいバイト[intLen];
9 fileUp.PostedFile.InputStream.Read(pic, 0, intLen);
10 cmd.Parameters.Add(":Photo", OracleType.Blob).Value = pic;
11回試してみる
12 {
13 cn.Open();
14 cmd.ExecuteNonQuery();
15}
16 キャッチ (例外例)
17 {
18 応答.書き込み(例:メッセージ);
19}
ついに20
21 {
22 cn.Close();
23 }
24
4. 読み取り方法は次のとおりです。
Oracle からピクチャ (ファイル) を読み取る
1OracleConnection cn = 新しい OracleConnection(strCn);
2OracleCommand cmd = cn.CreateCommand();
3cmd.CommandText = "test_table から写真を選択";
4トライ
5{
6 cn.Open();
7 MemoryStream ストリーム = new MemoryStream();
8 IDataReader リーダー = cmd.ExecuteReader();
9 if (reader.Read())
10 {
11 byte[] pic = (byte[])reader[0];
12 //byte[] pic = (byte[])cmd.ExecuteScalar();
13 stream.Write(pic, 0, pic.Length);
14 //ビットマップ bitMap = 新しいビットマップ(ストリーム);
15 //Response.ContentType = "画像/Jpeg";
16 //bitMap.Save(Response.OutputStream, ImageFormat.Jpeg);
17 //コメント部分は画像をダウンロードする代わりにIEで画像を表示することができます。
18 //次のメソッドはファイルを直接ダウンロードします
19 Response.ContentType = "アプリケーション/オクテットストリーム";
20 Response.AddHeader("Content-Disposition", "attachment;FileName= デモ.JPG");
21 応答.BinaryWrite(pic);
22 応答.End();
23 }
24
25}
26catch (例外例)
27{
28 応答.書き込み(例:メッセージ);
29}
30ついに
31{
32 cn.Close();
33}
34
http://www.cnblogs.com/weiweictgu/archive/2006/11/17/563761.html