آژانس هواپیمایی
pop up

عکس در دیتا بیس

شروع موضوع توسط alireza MX ‏29 ژانویه 2008 در انجمن asp , ASP.NET

  1. alireza MX

    alireza MX Registered User

    تاریخ عضویت:
    ‏18 فوریه 2006
    نوشته ها:
    50
    تشکر شده:
    0
    سلام دوستان
    میشه کاملا توضیح بدید چه جوری میشه عکس رو تو دیتا بیس ذخیره کرد و چه جوری نشون داد.
    البته ذخیره کردنشو یه چیزایی میدونم ولی برای نمایش رو نمیدونم.
    ممنون میشم کمک کنید.
     
  2. amin_lili

    amin_lili کاربر تازه وارد

    تاریخ عضویت:
    ‏24 آپریل 2007
    نوشته ها:
    528
    تشکر شده:
    2
    محل سکونت:
    ای کاش آنجا ...
    برای ذخیره تصاویر در sql server می تونی فیلد از نوع image تعریف کنی . در دا تنت هم باید تصویر رو درون یه آرایه های باینری ریخته و به sql server پاس بدی :

    کد ذخیره تصویر در sql server
    کد:
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            using (BinaryReader reader = new BinaryReader                    (FileUpload1.PostedFile.InputStream))
            {
                byte[] image = reader.ReadBytes                    (FileUpload1.PostedFile.ContentLength);
                SaveImage(image);
            }
        }
    }
    
    private int SaveImage(byte[] image)
    {
        int rowsAffected;
    
        using (SqlConnection connection = new SqlConnection(“...“))
        {
            using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandText = "INSERT INTO Photos                                      (Photo) VALUES (@Photo)";
                command.Parameters.AddWithValue("@Photo", image);
    
                connection.Open();
                rowsAffected = command.ExecuteNonQuery();
            }
        }
    
        return rowsAffected;
    }
    
    کد نمایش تصویر درون SQL Server در صفحه وب :
    کد:
    protected void Page_Init(object sender, EventArgs e)
    {
        if (Request.QueryString["id"] != null)
        {
            int id;
    
            if (Int32.TryParse(Request.QueryString["id"], out id))
            {
                Response.Clear();
                Response.ContentType = "image/jpeg";
    
                Image image = RetrieveImage(id);
                image.Save(Response.OutputStream, ImageFormat.Jpeg);
            }
        }
    }
    
    private Image RetrieveImage(int photoId)
    {
        Image image = null;
    
        using (SqlConnection connection = new SqlConnection("..."))
        {
            using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandText = "SELECT Photo FROM Photos                                      WHERE PhotoId = @PhotoId";
                command.Parameters.AddWithValue("@PhotoId", photoId);
    
                connection.Open();
                byte[] imageData = (byte[])command.ExecuteScalar();
    
                MemoryStream memStream = new MemoryStream(imageData);
                image = Image.FromStream(memStream);
            }
        }
        return image;
    }
    
     
  3. alireza MX

    alireza MX Registered User

    تاریخ عضویت:
    ‏18 فوریه 2006
    نوشته ها:
    50
    تشکر شده:
    0
    ممنون امین جان.خیلی کمکم کرد.
     
  4. alireza MX

    alireza MX Registered User

    تاریخ عضویت:
    ‏18 فوریه 2006
    نوشته ها:
    50
    تشکر شده:
    0
    سلام دوستان
    من عکسامو تو دیتا بیس ذخیره کردم.وقتی میخوام یه دونه عکس از DB بخونم مشکلی نداره و نمایش میده.
    حالا مشکلم اینه:
    من یه فیلد تو جدول عکس دارم به نام Idproject .حالا وقتی میگم مثلا عکسایی که این آی دیشون برابر با 0 هست رو نشون بده یه کنترل عکس میذارم تو GridVeiw اگه مثلا 3 تا عکس باشه 3 تا عکس نشون میده ولی همشون رو عکس اولی نشون میده.در حالی که وقتی روی هر کدوم از عکسا کلیک میکنم که بزرگ نشون بده عکسا هر 3 تا عکس رو نشون میده.
     
  5. m-sh

    m-sh Registered User

    تاریخ عضویت:
    ‏30 ژوئن 2003
    نوشته ها:
    1,033
    تشکر شده:
    9
    ذخیره عکس در دیتا بیس باعث افزایش حجم اون می شه و کار انتقال و ... را خیلی سخت می کنه!

    این کار چه حسنی داره ؟!
     
  6. alireza MX

    alireza MX Registered User

    تاریخ عضویت:
    ‏18 فوریه 2006
    نوشته ها:
    50
    تشکر شده:
    0
    به هر حال من چاره ای ندارم .راه حلی برای مشکل دارین؟
     
  7. boxilink
  8. alireza MX

    alireza MX Registered User

    تاریخ عضویت:
    ‏18 فوریه 2006
    نوشته ها:
    50
    تشکر شده:
    0
    من تا حالا این جور چیزی ندیده بودم.
    تعداد عکس رو تشخیص میده یا وقتی رو عکس کلیک میکنم عکس بزرگ هر عکس رو میاره ولی وقتی همه رو میخواد تو GridVeiw نشون بده به تعداد همه ی عکسا فقط اولی رو نشون میده.
     
  9. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,347
    تشکر شده:
    1,320
    محل سکونت:
    یه خورده اونورتر
    حتما کد مشکل داره. تا کد رو نبینیم که نمیشه نظری داد.
     
  10. alireza MX

    alireza MX Registered User

    تاریخ عضویت:
    ‏18 فوریه 2006
    نوشته ها:
    50
    تشکر شده:
    0
    کد نمایش عکس (صفحه Image.ashx)

    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["..."].ToString());
    SqlCommand com = new SqlCommand("SELECT Thumbnail FROM Images WHERE (IdCollege [email protected])", con);
    com.Parameters.Add("@IdCollege",SqlDbType.Int).Value=context.Request.QueryString["IdCollege"];
    con.Open();
    byte[] image = (byte[])com.ExecuteScalar();
    con.Close();
    context.Response.ClearContent();
    context.Response.ClearHeaders();
    context.Response.ContentType = "image/gif";
    context.Response.BinaryWrite(image);

    کد Gridview (صفحه Gallery.aspx)

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
    <Columns>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Gallery/Image.ashx?IdCollege=0" PostBackUrl='<%# "~/Gallery/VeiwImage.aspx?IdImage="+ Eval("IdImage") %>'/>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>


    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:... %>"
    SelectCommand="SELECT [IdImage], [IdCollege], [Thumbnail] FROM [Images] WHERE ([IdCollege] = @IdCollege)">
    <SelectParameters>
    <asp:parameter DefaultValue="0" Name="IdCollege" Type="Int32" />
    </SelectParameters>
    </asp:SqlDataSource>
     
  11. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,347
    تشکر شده:
    1,320
    محل سکونت:
    یه خورده اونورتر
    من که توی این کد هیچ bind یا حلقه ای نمی بینم....
    اگر id تصاویر idImage هست باید IdImage هم بفرستی به Image.ashx. یعنی:
    کد:
    <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Gallery/Image.ashx?IdCollege=0[COLOR=Red][B]&<%= Eval("IdImage") %>[/B][/COLOR]" PostBackUrl='<%# "~/Gallery/VeiwImage.aspx?IdImage="+ Eval("IdImage") %>'/>
    
    و اگر از حلقه یا bind استفاده نکردی باید sql command هم یک چیزی شبیه این بشه:
    کد:
    SELECT Thumbnail FROM Images WHERE IdCollege [email protected][B][COLOR=Red] AND [email protected][/COLOR][/B]
    
    که @IdImage رو در واقع در جواب Image.ashx میگیری ( &<%= Eval("IdImage") %> )
    ولی اگر source ت همونی هست که پایین کدها نوشتی فقط همون قسمت اول فکر کنم کافی باشه و لازم نیست sql command رو تغییر بدی.
     
  12. alireza MX

    alireza MX Registered User

    تاریخ عضویت:
    ‏18 فوریه 2006
    نوشته ها:
    50
    تشکر شده:
    0
    ممنون مشکلم حل شد.
    هر دو متغیر رو با Eval پاس دادم.
    بازم ممنون.
     
  13. the wizard

    the wizard کاربر تازه وارد

    تاریخ عضویت:
    ‏8 آگوست 2009
    نوشته ها:
    31
    تشکر شده:
    0
    سلام
    من مي خوام از طريق asp.net يك عكس را با ساير اطلاعات وارد DB بكنم. ميشه كمكم كنيد.
     
  14. avajang.com .leftavajang.com.right