2013-09-26 13 views
0

내 프로젝트에서 관리자가 임원 프로필에 메달을 추가하도록 허용합니다. 현재 최대 5 개의 메달을 넣을 수 있습니다. 그러나 선생님은 관리자에게 임원 프로필에 대해 원하는만큼의 메달을 삽입하도록 요청합니다. 나는 관리자가 삽입 한 모든 이미지를 검색하는 방법을 모르겠다. varbinary를 사용하여 데이터베이스에 이미지를 삽입하는 방법을 알고있다. 이 일을 위해 저에게 길을주십시오. 감사! 업로드데이터베이스에서 여러 이미지 가져 오기 표시

코드 : 아래

코드는 내가 5 개 메달의 최대 삽입 할 어떻게

System.Drawing.Image uploaded = System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream); 

System.Drawing.Image newImage = new Bitmap(1024, 768); 
using (Graphics g = Graphics.FromImage(newImage)) 
{ 
    g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
    g.DrawImage(uploaded, 0, 0, 1024, 768); 
} 

byte[] results; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(c => c.FormatID == ImageFormat.Jpeg.Guid); 
    EncoderParameters jpegParms = new EncoderParameters(1); 
    jpegParms.Param[0] = new EncoderParameter(Encoder.Quality, 95L); 
    newImage.Save(ms, codec, jpegParms); 
    results = ms.ToArray(); 
} 

string sqlImage = "Insert into OfficerMedal(policeid, image) values ('" + Session["policeid"] + "', @Data)"; 
SqlCommand cmdImage = new SqlCommand(sqlImage); 
cmdImage.Parameters.AddWithValue("@Data", results); 
InsertUpdateData(cmdImage); 

나는 동안 추가하려면 aspx 페이지

protected void Page_Load(object sender, EventArgs e) 
    { 
     string strQuery = "select image from OfficerMedal where policeid='" + Session["policeid"] + "'"; 
     SqlCommand cmd = new SqlCommand(strQuery); 
     DataTable dt = GetData(cmd); 
     if (dt != null) 
     { 
      download(dt); 
     } 
    } 

    private DataTable GetData(SqlCommand cmd) 
    { 
     DataTable dt = new DataTable(); 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
     SqlDataAdapter sda = new SqlDataAdapter(); 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = con; 
     try 
     { 
      con.Open(); 
      sda.SelectCommand = cmd; 
      sda.Fill(dt); 
      return dt; 
     } 
     catch 
     { 
      return null; 
     } 
     finally 
     { 
      con.Close(); 
      sda.Dispose(); 
      con.Dispose(); 
     } 
    } 

    private void download(DataTable dt) 
    { 
     // check if you have any rows at all 
     // no rows -> no data to convert! 
     if (dt.Rows.Count <= 0) 
      return; 

     // check if your row #0 even contains data -> if not, you can't do anything! 
     if (dt.Rows[0].IsNull("image")) 
      return; 

     Byte[] bytes = (Byte[])dt.Rows[0]["image"]; 
     Response.Buffer = true; 
     Response.Charset = ""; 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.ContentType = "image/jpg"; 
     Response.BinaryWrite(bytes); 
     Response.End(); 
    } 

를 사용하여 이미지를 검색 데이터베이스에서 이미지 1을 1 회 검색하는 현재 방법입니다. 대신 장교에 속한 모든 이미지를 검색합니다.

+0

일부 코드는 지금까지 시도한 모든 내용을 게시하십시오. – Pratik

+0

"그 이미지를 데이터베이스에 삽입하는 방법 만 알고 있습니다."- 이미지를 데이터베이스에 바이너리로 삽입하거나 파일 시스템에 이미지를 저장하고 데이터베이스에 경로를 저장한다는 의미입니까? – kandroid

+0

이미지를 바이너리로 데이터베이스에 삽입 – XiAnG

답변

0

일반적인 방법은 ASPX 페이지 자체가 아닌 HttpHandler입니다. 핸들러는 데이터베이스에서 이미지 데이터를 검색하여 그래픽으로 출력하는 역할을 담당합니다. 일반 <img> 태그의 경우 src으로, <asp:image> 컨트롤의 경우 ImageUrl 속성으로 사용할 수 있습니다.

처리기를 추가하는 가장 쉬운 방법은 새 항목 추가 대화 상자에서 일반 처리기를 선택하는 것입니다 : 핸들러의 코드에서 Add New Item

,이 ProcessRequest는 작업을 예를 들어, 수행하는 방법

public void ProcessRequest(HttpContext context) 
{ 
    byte[] imageBytes; 
    // Get the id of the image we want to show 
    string imageId = context.Request.QueryString["ImageId"]; 

    // Get the image bytes out of the database 
    using (SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
    { 
     // Pass in the image id we got from the querystring 
     SqlCommand cmd = new SqlCommand("SELECT image FROM PoliceMedal WHERE ImageId=" + imageId, conn); 
     conn.Open(); 
     SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
     reader.GetBytes(0, 0, imageBytes, 0, int.MaxValue); 
    } 

    context.Response.Buffer = true; 
    context.Response.Charset = ""; 
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    context.Response.ContentType = "image/jpg"; 
    context.Response.BinaryWrite(imageBytes); 
    context.Response.End(); 
} 

그래서 우리는 데이터베이스에서 이미지 데이터를 반환합니다 우리의 핸들러를 가지고 있고, 우리는 \ImageHandler.ashx?ImageId=1 같은 URL로이를 호출합니다. 이 경우 PoliceMedal 테이블에 키를 추가해야한다는 점에서 데이터베이스를 변경해야합니다. SQL Server IDENTITY 열을 제안합니다.

귀하의 질문에 어떻게 ASPX 페이지에 이미지를 표시하는지 명확하지 않으므로 여기서는 PlaceHolder에 이미지를 추가하는 방법을 보여 드리겠습니다. 따라서 장교 용 이미지 ID 집합을 검색하고 각각에 대해 <asp:image> 컨트롤을 만들고 이미지를 PlaceHolder에 추가합니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    using (
     SqlConnection conn = 
      new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
    { 
     // Query the table to get the list of image IDs for the current user 
     SqlCommand cmd = new SqlCommand("SELECT ImageId FROM PoliceMedal WHERE policeid = " + Session["policeid"], conn); 
     conn.Open(); 
     SqlDataReader imageReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

     // For each image in the database 
     while (imageReader.Read()) 
     { 
      // Create the new Image control 
      Image medalImage = new Image(); 
      // Call the handler, passing the id of the image in the querystring 
      medalImage.ImageUrl = string.Format("ImageHandler.ashx?ImageId={0}", 
               imageReader.GetInt32(0)); 
      // Add the image to the placeholder 
      MedalPlaceHolder.Controls.Add(medalImage); 
     } 
    } 
} 
관련 문제