1.     흐름

 

 

입력한 제목과 설명, 불러온 이미지를 DataBase에 저장. 입력한 제목을 선택하면 제목과 이미지 내용이 출력. 이때 내용은 Tootip을 사용하여 출력.

 

 

2.     프로젝트 구성

MyUsing – Main프로젝트

UpLoadDll – 입력된 Data DataBase에 저장하는 역할

GetListDll – 저장된 글 목록의 제목을 표시하는 역할

ViewDll – Data DownLoad하는 역할

UpLoadServer, GetListServer, ViewServer – DLL의 서버

  

3.     프로젝트 설명

A.     Table, 저장프로시저

                         i.         Table

 

                        ii.         저장프로시저

1.      DataUpLoad

 

2.      GetList
 


3.
     
DataDownLoad


B.      코드분석

 

 

MyUsing - UpLoad 수행

 

 

private void button1_Click(object sender, EventArgs e)

{

openFileDialog1.Filter = "이미지 files(*.bmp)|*.bmp";

    if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

        control1.ImageSrc = openFileDialog1.FileName;

    }

}

 

private void control1_UpLoadEventHandler(MyPageData mp) //이벤트발생

{

Object obj = Activator.GetObject(typeof(UpLoadDll.Class1), "http://localhost:10300/RemoteUpLoadServer.Soap");

    UpLoadDll.Class1 dc = obj as UpLoadDll.Class1;

 

    dc.DataUpLoad(mp.UserName, mp.Title, mp.Desc, mp.ImageString);

    MessageBox.Show("UpLoad");

    this.Close()

}

 

버튼이 눌렸을 때 openFileDialog를 이용하여 *.bmp파일을 선택.

UpLoadDll을 통해 작업을 처리

 

 

UpLoadDll

 

 

public class Class1 : MarshalByRefObject

{

     public void DataUpLoad(string UserName, string title, string contents, string photoFIlepath)

     {

         byte[] photo = GetPhoto(photoFIlepath); //이미지를 저장하기 위한 함수

 

         string connString = @"Data Source=504-03\SQL2005;Initial Catalog=master;User ID=jjung1105;Password=1234";

         SqlConnection scon = new SqlConnection(connString);

 

         SqlCommand scom = new SqlCommand();

         scom.Connection = scon;

 

         scom.CommandText = "DataUpLoad";

         scom.CommandType = System.Data.CommandType.StoredProcedure;

 

         SqlParameter sparam = new SqlParameter("@UserName", SqlDbType.VarChar, 50);

         sparam.Value = UserName;

 

         SqlParameter sparam2 = new SqlParameter("@Title", SqlDbType.VarChar, 50);

         sparam2.Value = title;

 

         SqlParameter sparam3 = new SqlParameter("@Contents", SqlDbType.VarChar, 50);

         sparam3.Value = contents;

 

         SqlParameter sparam4 = new SqlParameter("@Photo", SqlDbType.Image, photo.Length);

         sparam4.Value = photo;

 

         SqlParameter sparam5 = new SqlParameter("@Size", SqlDbType.Int);

         sparam5.Value = photo.Length;

 

         scom.Parameters.Add(sparam);

         scom.Parameters.Add(sparam2);

         scom.Parameters.Add(sparam3);

         scom.Parameters.Add(sparam4);

         scom.Parameters.Add(sparam5);

 

         scon.Open();

         scom.ExecuteNonQuery();

         scom.Connection.Close();

      }

 

      public static byte[] GetPhoto(string filepath)

      {

          FileStream stream = new FileStream(filepath, FileMode.Open, FileAccess.Read);

          BinaryReader reader = new BinaryReader(stream);

 

          byte[] photo = reader.ReadBytes((int)stream.Length);   

          reader.Close();

          stream.Close();

 

          return photo;

        }

    }

 

 

매개변수로 넘어온 사용자ID, 제목, 내용, 파일경로를 저장프로시저(DataUpLoad)를 통해서 처리를 한다.

이때 bitmap파일을 DataBase에 저장해야하기 때문에 GetPhoto함수를 만들어서 FileStream을 통해 byte[]에 대입하여 처리하도록 한다.

 

 

 

MyUsing - GetList수행

 

private void DownLoad_Load(object sender, EventArgs e)

{

    Object obj = Activator.GetObject(typeof(GetListDll.Class1), "http://localhost:10400/RemoteGetListServer.Soap");

    GetListDll.Class1 gc = obj as GetListDll.Class1;

 

    ArrayList list = new ArrayList();

 

    gc.GetList("jjung", ref list);

    foreach (string s in list)

    {

        listBox1.Items.Add(s);  //리스트박스에 제목을 출력

    }

}

 

ArrayList를 선언 후 GetListDll을 통해 해당 사용자가 올린 글의 제목을 담는다. 담긴 ArrayList foreach를 통해 listbox Add한다.

 

 

GetListDll

 

 

public class Class1:MarshalByRefObject

{

public void GetList(string UserName, ref ArrayList list)

    {

        string connString = @"Data Source=504-03\SQL2005;Initial Catalog=master;User ID=jjung1105;Password=1234";

        SqlConnection scon = new SqlConnection(connString);

 

        SqlCommand scom = new SqlCommand();

        scom.Connection = scon;

 

        scom.Connection.Open();

 

        SqlDataReader sr;

 

        scom.CommandText = "GetList";

        scom.CommandType = System.Data.CommandType.StoredProcedure;

 

        SqlParameter sparam = new SqlParameter("@UserName", SqlDbType.VarChar, 50);

        sparam.Value = UserName;

 

        scom.Parameters.Add(sparam);

 

        sr = scom.ExecuteReader();

 

        while (sr.Read())

        {

            list.Add(sr.GetValue(0).ToString());

        }

        sr.Close();

        scom.Connection.Close();

}

}

 

매개변수로 넘어온 UserName을 가지고 저장프로시저(GetList)를 통해서 일치하는 글 제목을 모두 ref list Add시킨다.

 

 

 

 

MyUsing – DownLoad, View수행

 

 

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 

{

try

    {

        byte[] MyData = null;

        string desc = null;

        int ArraySize = new int();

 

        title = listBox1.SelectedItem.ToString();

        Object obj2 = Activator.GetObject(typeof(ViewDll.Class1), "http://localhost:10700/RemoteViewServer.Soap");

        ViewDll.Class1 dc = obj2 as ViewDll.Class1;

 

        dc.ScreenView("jjung", title, ref MyData, ref ArraySize, ref desc);

 

        MemoryStream ms = new MemoryStream(MyData, 0, ArraySize+1);

 

        downControl1.Title = title;

        downControl1.Desc = desc;

        downControl1.Image = Image.FromStream(ms);

        ms.Close();

        }

catch

    {

 

    }

}

 

DataBase에 저장된 Data들을 꺼내와야 하기 때문에 ViewDll을 통해 필요 조건을 가져온다. 필요 Data는 제목, 내용, 이미지를 다시 만들기 위한 byte[], int가 필요하다. Byte[], int MemoryStream을 사용해서 이미지를 다시 만든다.

 

ViewDll

 

public class Class1:MarshalByRefObject

{       

public void ScreenView(string UserName, string title, ref byte[] MyData, ref int ArraySize, ref string desc)

    {

        string connString = @"Data Source=504-03\SQL2005;Initial Catalog=master;User ID=jjung1105;Password=1234";

 

        SqlConnection scon = new SqlConnection(connString);

        scon.Open();

 

        SqlCommand scom = new SqlCommand();

        scom.Connection = scon;

 

        scom.CommandText = "DataDownLoad";

        scom.CommandType = System.Data.CommandType.StoredProcedure;

 

        SqlParameter sparam = new SqlParameter("@UserName", SqlDbType.VarChar, 50);

        sparam.Value = UserName;

 

        SqlParameter sparam2 = new SqlParameter("@Title", SqlDbType.VarChar, 50);

        sparam2.Value = title;

 

        scom.Parameters.Add(sparam);

        scom.Parameters.Add(sparam2);

 

        SqlDataReader dr = scom.ExecuteReader();

 

        while (dr.Read())

        {

            MyData = (byte[])dr.GetValue(0);

            ArraySize = MyData.GetUpperBound(0);

            desc = dr.GetValue(3).ToString();

        }

        dr.Close();

        scon.Close();           

}

}

 

매개변수로 넘어온 UserName, title을 가지고 저장프로시저(DataDownLoad)를 통해서 원하는 Data를 검색한다. 이때 이미지를 다시 만들기 위해서 ref byte[] MyData, ref int ArraySize에 값을 채워준다.

 

 

 


'COMPUTER TECH > C# 실전자료' 카테고리의 다른 글

SqlParameter  (0) 2010.08.13
Http method – get, post  (1) 2010.08.13
DataBase에 이미지 저장 / 불러오기  (0) 2010.08.13
XML 이란???  (0) 2010.08.13
WCF란??  (0) 2010.08.13
SilverLight WCF서비스 작성 & CrossDomain 해결  (0) 2010.08.13
Posted by ... XJAPAN