SQL Server는 이진 데이터를 포함하는 유형인 이미지라는 특별한 데이터 유형을 제공합니다. 아래 예에서는 텍스트나 사진을 데이터베이스에 넣는 방법을 보여줍니다. 이 기사에서는 SQL Server에서 이미지를 저장하고 읽는 방법을 살펴보겠습니다.
1. 테이블 생성:
SQL SERVER에서 다음 구조로 테이블을 생성합니다.
2. SQL SERVER 데이터베이스에 그림
을 저장하려면 먼저 웹 서버에 업로드해야 합니다. 이는 클라이언트의 TextBox 웹 컨트롤에서 그림을 가져오는 데 사용됩니다. . 귀하의 웹 서버가 나타납니다. encType 속성을 다음과 같이 설정합니다:
Stream imgdatastream = File1.PostedFile.InputStream;
int
imgdatalen = File1.PostedFile.ContentLength;
string
imgtitle = TextBox1.Text;
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)", 연결)
SqlParameter paramTitle = new SqlParameter
("@imgtitle", SqlDbType.VarChar, 50 ) ;
paramTitle.Value = imgtitle;
command.Parameters.Add( paramTitle);
새로운 SqlParameter( "@imgdata", SqlDbType.Value
=
imgdata
;
new SqlParameter( "@imgtype", SqlDbType.VarChar, 50 );
paramType.Value = imgtype;
command.Parameters.Add( paramType )
;
int numRowsAffected = command.ExecuteNonQuery()
; ;
3. 데이터베이스에서 읽기를 다시 시작합니다.
이제 SQL Server에서 입력한 데이터를 읽어 보겠습니다. 이미지를 원하는 위치에 저장할 수도 있습니다.
private void Page_Load(개체 전송자, System.EventArgs e)
{
string imgid =Request.QueryString
["imgid"];
string connstr=((NameValueCollection)
Context.GetConfig("appSettings"))["connstr"];
"SELECT imgdata, imgtype FROM ImageStore id = " +
SqlConnection 연결=
new SqlConnection(connstr);
SqlCommand 명령 = new SqlCommand(sql, 연결)
dr = command.ExecuteReader()
;
(dr.Read())
{
Response.ContentType = dr["imgtype"].ToString();
Response.BinaryWrite
(
(byte[]) dr["imgdata"]
}
참고 사항 Response.Write 대신 Response.BinaryWrite입니다.
다음은 C# Winform용 저장 및 읽기 프로그램입니다. 차이점을 직접 비교해 보세요! (편의를 위해 데이터베이스 필드를 imgtitle 및 imgdata로 단순화했습니다.
System 사용,
System. Drawing 사용,
System.Collections 사용,
System.ComponentModel 사용,
System.Windows.Forms 사용,
System 사용 .Data;
System.IO 사용;
System.Data.SqlClient 사용;
네임스페이스 WindowsApplication21
{
///
///
Form1 요약 설명
///
public class Form1 :
System.Windows.Forms.Forms
버튼 버튼1;
///
/// 필수 디자이너 변수
///
private System.ComponentModel.Container 구성 요소 = null;
private string ConnectionString = "통합 보안=SSPI
;초기 카탈로그=;DataSource=localhost;"
;
개인 SqlCommand cmd = null;
개인 System.Windows.Forms.PictureBox
pic1;
개인 System.Windows.Forms.OpenFileDialog1;
개인
System.Windows.Forms. Label label2;
private string nowId=null;
public Form1()
{
//
// Windows Forms Designer 지원에 필요
//
초기화구성요소();
//
/
/ TODO: 뒤에 생성자 코드를 추가합니다. InitializeComponent 호출
//
}
///
/// 사용 중인 모든 리소스를 정리합니다.
///
보호 재정의 void Dispose( bool disposing )
{
if (conn.State == ConnectionState.Open)
conn.Close();
if( disposing )
{
if (comComponents != null)
{
Components.Dispose()
}
}
base.Dispose( disposing );
}
#region Windows Form 디자이너가 생성한 코드
///
/// 디자이너는 필요한 메서드를 지원합니다. 코드 편집기를 사용하여/// 이 메서드의 내용을
수정하지 마세요
.///
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.Label();
//
//
버튼1
//
this.button1 .Location = new System.드로잉.Point(0, 40);
this.button1.Name = "button1";
this.button1.Size=
new System.드로잉.Size(264, 48);
;
this.button1.Text = "새 그림 추가";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// pic1
//
this.pic1.Location = new System. Drawing.Point ( 280, 8);
this.pic1.Name = "pic1";
this.pic1.Size = new System.드로잉.Size(344, 264);
this.pic1.TabStop
= 3
; /
// 버튼2
//
this.button2.Location = new System.드로잉.Point(0, 104);
this.button2.Name = "button2"
this.button2.Size = new System.드로잉.Size(264, 40) );
this.button2.TabIndex = 4;
this.button2.Text = "데이터베이스에서 이미지 복원";
this.button2.Click
+= new System.EventHandler(this.button2_Click)
//
this
.openFileDialog1
.Filter = ""이미지 파일(*.jpg, *.bmp, *.gif)|*.jpg|*.bmp|*.gif""
//
// label2
//
this.label2.Location = 새 시스템 .드로잉.포인트(0, 152);
this.label2.Name = "label2";
this.label2.Size = new System.드로잉.Size(264, 48)
;
//
// Form1
//
this.AutoScaleBaseSize = new System.드로잉.Size(6, 14);
this.ClientSize = new System.드로잉.Size(632, 273)
this.Controls.AddRange(new System.Windows.Forms.Control[ ] {
this.label2,
this.button2,
this.pic1,
this.button1});
this.Name = "Form1";
this.Text = "Form1"
this.Load += new System.EventHandler(this.Form1_Load) ;
this.ResumeLayout(false)
}
#endregion
///
/// 애플리케이션의 주요 진입점입니다.
///
[STAThread]
static void Main()
{
Application.Run(new Form1())
}
private void 버튼1_Click(객체 전송자, System.EventArgs e)