برگزیده های پرشین تولز

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

alireza MX

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

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
برای ذخیره تصاویر در 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;
}
 

alireza MX

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

m-sh

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

این کار چه حسنی داره ؟!
 

alireza MX

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

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
حتما کد مشکل داره. تا کد رو نبینیم که نمیشه نظری داد.
 

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 =@IdCollege)", 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>
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
من که توی این کد هیچ 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 =@IdCollege[B][COLOR=Red] AND IdImage=@IdImage[/COLOR][/B]
که @IdImage رو در واقع در جواب Image.ashx میگیری ( &<%= Eval("IdImage") %> )
ولی اگر source ت همونی هست که پایین کدها نوشتی فقط همون قسمت اول فکر کنم کافی باشه و لازم نیست sql command رو تغییر بدی.
 

alireza MX

Registered User
تاریخ عضویت
18 فوریه 2006
نوشته‌ها
50
لایک‌ها
0
ممنون مشکلم حل شد.
هر دو متغیر رو با Eval پاس دادم.
بازم ممنون.
 

the wizard

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