SQL Server は、バイナリ データを含む型であるイメージという特別なデータ型を提供します。以下の例は、テキストまたは写真をデータベースに入れる方法を示しています。この記事では、SQL Server にイメージを保存および読み取る方法を説明します。
1. テーブルの作成:
SQL SERVER で次の構造のテーブルを作成します。
2. SQL SERVER データベースに画像を保存する
には、まず画像を WEB サーバーにアップロードする必要があります。これは、クライアントの TextBox Web コントロールから画像をインポートするために使用されます。 WEB サーバーが起動します。 encType プロパティを myltipart/formdata
に
設定
し
ます
。
byte[imgdatalen];
int n = imgdatastream.Read(imgdata, 0, imgdatalen);
string connstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"]
;
SqlCommand コマンド = new SqlCommand
("INSERT INTO ImageStore(imgtitle, imgtype, imgdata)
VALUES (@imgtitle, @imgtype, @imgdata)", connection );
SqlParameter paramTitle = new SqlParameter
("@imgtitle", SqlDbType.VarChar, 50 ); ;
paramTitle.Value = imgtitle;
SqlParameter paramData ( "@imgdata", SqlDbType.Image );
command.Parameters.Add
(
paramData )
;
new SqlParameter( "@imgtype", SqlDbType.VarChar, 50 );
paramType.Value = imgtype
;
int numRowsAffected = command.ExecuteNonQuery(
)
;
;
3. データベースからの読み取りを再開します。
次に、SQL Server から入力したデータを読み取ります。画像をブラウザに出力します。必要な場所に保存することもできます。
private void Page_Load(object sender, System.EventArgs e)
{
string imgid =Request.QueryString
["imgid"];
string connstr=((NameValueCollection)
Context.GetConfig("appSettings"))["connstr"];
"SELECT imgdata, imgtype FROMImageStore
id = " + imgid;
SqlConnection 接続 = new
SqlCommand(sql, connection);
dr
= command.ExecuteReader();
(dr.Read())
{
Response.ContentType = dr["imgtype"
].ToString();
Response.BinaryWrite
( (byte[]) dr["imgdata"] )
}
connection.Close();
Response.Write ではなく Response.BinaryWrite です。
これは C# Winform 用の保存および読み取りプログラムです。違いをご自身で比較してください (便宜上、データベース フィールドを imgtitle と imgdata の 2 つに単純化しました。
System を使用する;
System.Drawing を使用する;
System.Collections を使用する;
System.ComponentModel を使用する;
System.Windows.Forms を使用する;
System を使用する
).Data;
using System.IO;
using System.Data.SqlClient;
namespace WindowsApplication21
{
///
/// Form1 の概要
///
public class Form1 :
System.Windows.Forms.Forms
.ボタン button1;
///
/// 必須のデザイナー変数
///
private
System.ComponentModel.Container コンポーネント = null;
private string ConnectionString = "Integrated Security=SSPI;Initial Catalog=;DataSource=localhost;"
;
プライベート SqlCommand cmd = null;
プライベート System.Windows.Forms.PictureBox
pic1;
プライベート
文字
列 sql = null;
ラベル label2;
private string nowId=null;
public Form1()
{
//
//
Windows フォーム デザイナーのサポートに必要
//
InitializeComponent();
//
/ / TODO: コンストラクター コードをInitializeComponent 呼び出し
//
}
///
/// 使用中のリソースをクリーンアップします。
///
protected オーバーライド void Dispose( bool disposing )
{
if (conn.State == ConnectionState.Open)
conn.Close();
if( disposing )
{
if (components != null)
{
Components.Dispose()
}
}
Base.Dispose( disposing );
}
#region Windows フォーム デザイナーが生成したコード
///
/// デザイナーは必要なメソッドをサポートしています。 ///このメソッドの内容を
変更するためにコード エディターを使用しないでください
。///
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.pic1 = new System.Windows.Forms.PictureBox();
this.button2 = new System.Windows.Forms. Button();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.label2 = new System.Windows.Forms.Layout()
;
//
// button1
//
this.button1 .Location = 新しい System.Drawing.Point(0, 40);
this.button1.Name
= "button1";
this.button1.Size = new System.Drawing.Size(264, 48);
;
this.button1.Text = "新しい画像を追加";
this.button1.Click += new System.button1_Click)
//
// pic1
//
this.pic1.Location = new System.Drawing.Point ( 280, 8);
this.pic1.Name = "pic1"
;
this.pic1.TabIndex = 3;
this.pic1.TabStop = false
; /
// button2
//
this.button2.Location = new System.Drawing.Point(0, 104);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(264, 40) );
this.button2.TabIndex = 4;
this.button2.Text = "データベースから画像を復元";
this.button2.Click
+= new System.EventHandler(this.button2_Click)
//
//
openFileDialog1
.Filter = ""画像ファイル (*.jpg, *.bmp, *.gif)|*.jpg|*.bmp|*.gif""
//
// label2
//
this.label2.Location = 新しいシステム.Drawing.Point(0, 152);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(264, 48)
;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(632, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[ ] {
this.label2,
this.button2,
this.pic1,
this.button1});
this.Name = "Form1"
;
this.Load += new System.EventHandler(this.Form1_Load) ;
this.ResumeLayout(false);
}
#endregion
///
/// アプリケーションのメイン エントリ ポイント。
///
[STAThread]
static void Main()
{
Application.Run(new Form1())
}
private void button1_Click(object sender, System.EventArgs e);