PDA

View Full Version : ذخيره و بازخواني عكس با Linq



alih210
یک شنبه 11 مرداد 1388, 11:42 صبح
سلام دوستان عزيزم
راستش با LINQ كار مي كنم ميخواستم ببينم براي ذخيره و بازخواني از چه دستوراتي استفاده ميشه؟

مرسي كلي:لبخندساده:

mn_zandy63
پنج شنبه 22 مرداد 1388, 21:00 عصر
یعنی چی برای ذخیره و بازیابی؟
سوالت خیلی کلیه.
بیشتر توضیح بده.
مثال بزن تا بهت توضیح بدم.
این که نوشتی یعنی آقا اصلا LINQ چی هست. یکی از دوستان زحمت کشیدن دارن LINQ رو توی همین فروم آموزش میدن٬ اگه منظورت همینه به این تاپیک یه نیگاه بنداز.
موفق باشی

alih210
جمعه 23 مرداد 1388, 12:40 عصر
چند تا نکته:
1. قسمتهای اموزشی Lnq که هسا خیلی مبتدیه و تازه اولاش و دارن یا میدن
2.توضیح بیشتر: دادهایی از نوع عکس با داده های دیگه تو فراخوانی و ذخیره داره که این مسئله حل شد که به زودی مثالی میزارم که کاملا مسئله رو توضیح میده
3.الان با مشکل عدم نمایش بعضی از فیلدای Lnq در کریستال مواجه شدم این موضوع رو مطرح کردم اما هنوز جوابی پیدا نشده

mn_zandy63
جمعه 23 مرداد 1388, 18:43 عصر
خب پس Linq رو بلدی٬ منظورت از سوال اولت کلا همین بحث عکس بود؟
(عذر میخوام عنوان سوالت رو دقت نکرده بودم)
برای عکس:
برای ذخیره باید bitmap رو به byte array تبدیل کنی و فیلد مربوطه رو مقدار دهی کنی.
اینجا میتونی روش های مختلف اینکار رو ببینی:
http://www.vbforums.com/showthread.php?t=358917

برای دریافت عکس هم٬ نوع داده فیلد مربوطه در Linq از نوع Binary هست که کافیه با تابع toArray به byte array تبدیلش کنی و اون رو به عکس تبدیل کنی. مثل این روش :


TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(byteArray);
یا


ImageConverter ic = new ImageConverter();
Image img = (Image)ic.ConvertFrom(byteArray);
Bitmap bitmap1 = new Bitmap(img);

در مورد Crystal Report توی همون سوالتون بهتون جواب دادم:
من معمولا Linq رو مستقیم به Crystal Report نمیفرستم. اما مشکل شما به این ترتیب حل میشه:
داخل فایل dbml فیلدی که عکس شماست رو انتخاب کنید و مقدار type رو از binary به byte[] تبدیل کنید.
بعد از اینکار فیلد مورد نظرتون رو میتونید داخل crystal report به صورت عکس ببینید.

موفق باشید

alih210
دوشنبه 02 شهریور 1388, 11:01 صبح
چند تا مشكل وقتي با LINQ و ‍Crystal Report در زمينه كار با عكس داشتم .:لبخند:
1. تبديلايي كه لازم بود براي ريختن عكس تو فيلدي از پايگاه كه از نوع Image تعريف شده كه در واقع تبديلاتي بين نوع Stream و Byte[] صورت گرفت
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, عكس انتخابي);
byte[] arrImage = ms.GetBuffer();
ms.Close();
2. قرار گرفتن عكس در گزارشات با راهنمايي دوستان در فروم نوع فيلد عكس در dbml مربوط به LINQ كه پيش فرض System.Data.Linq.Binary به []System.Byte عوض كنيم
بقيه روال به صورت عادي انجام ميشه
:لبخندساده:
لينك نمونه :
http://barnamenevis.org/forum/showthread.php?t=173100&page=2

hasty0087
پنج شنبه 16 اردیبهشت 1389, 01:53 صبح
سلام دوستان.
من مي خوام با لينكيو عكس رو تو پايگاه دادم ذخيره و بعد بازيابي كنم.
اين راهنمايي هايي رو هم كه نوشتيد استفاده كردم اما به جايي نرسيدم.
لطف كنيد يه مثال رو Upload كنيد.من چند روز ديگه بايد پرو‍‍زم رو تحويل بدم اگه ممكنه زودتر اين كار رو انجام بدين.
خيلي خيلي ممنون.

amin-soft
پنج شنبه 07 مرداد 1389, 11:36 صبح
تعریف متغیر :

DataClassesDataContext db = new DataClassesDataContext();

static string fileName = null;

static bool flag = false;

تابعی برای اپلود عکس :

string upload()
{

var fi = new FileInfo(FileUpload1.PostedFile.FileName);
if (!new[] { ".jpg", ".gif", ".bmp", ".png", ".jpeg" }.Contains(fi.Extension.ToLower()))
{
lbl_error.Visible = true;
lbl_error.Text = "پسوند فایل اشتباه است.";
flag = true;
return null;
}
if (FileUpload1.PostedFile.ContentLength > (4000 * 1024))
{
lbl_error.Text = "حجم عکس زیاد است.";
lbl_error.Visible = true;
flag = true;
return null;
}
string path1 = string.Format("./upload/gallary/{0}", fi.Name);
FileUpload1.SaveAs(Server.MapPath(path1));
Image1.Visible = true;
Image1.ImageUrl = "./upload/gallary/" + fi.Name;
return fi.Name;
}

ذخیره در دیتابیس :


try
{
fileName = upload();
if (flag) return;
if (fileName == null)
{
lbl_error.Visible = true;
lbl_error.Text = "تصویری ثبت نشده است";
return;
}

var tb = new ImgShow();
tb.Title = txt_title.Text;
tb.Img = fileName;
tb.TitlePart = DropDownList1.Text;
tb.Active = CheckBox2.Checked;
db.ImgShows.InsertOnSubmit(tb);
db.SubmitChanges();
Image1.ImageUrl = "../upload/gallary/" + fileName;
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
}

amin-soft
پنج شنبه 07 مرداد 1389, 11:46 صبح
قسمت نمایش عکس از دیتابیس :


بخش کد html :

<table>
<tr>
<td width="100%">

<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" BorderColor="White" BorderStyle="Ridge"
BorderWidth="1px" Font-Names="Tahoma" Font-Size="8pt" Width="100%"
Font-Italic="True" onpageindexchanging="GridView1_PageIndexChanging">
<RowStyle BackColor="#E0DFE3" BorderColor="White" BorderStyle="Ridge"
BorderWidth="1px" Height="30px" HorizontalAlign="Center"
VerticalAlign="Middle" />
<Columns>

<asp:BoundField DataField="Title" HeaderText="عنوان" >

<HeaderStyle Font-Names="Tahoma" Font-Size="12px" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Top" Width="40%" />
</asp:BoundField>

<asp:TemplateField HeaderText="عکس">
<ItemTemplate>
<img src="<%#"upload/hamian/"+ DataBinder.Eval(Container.DataItem,"Img") %>" width="100px" height="70px" alt="<%# DataBinder.Eval(Container.DataItem,"Title") %>"/>
</ItemTemplate>
<HeaderStyle Font-Names="Tahoma" Font-Size="12px" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Top" Width="50%" />
</asp:TemplateField>
<asp:TemplateField HeaderText="عملیات">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Img/info.gif"
ToolTip="ویرایش" CommandArgument='<%# Eval("Id") %>' oncommand="update1" />
<asp:ImageButton ID="ImageButton2" runat="server"
ImageUrl="~/Img/notavai.gif" OnClientClick="return suredelete()"
style="height: 16px" ToolTip="حذف" CommandArgument='<%# Eval("Id") %>'
oncommand="delete1" />
</ItemTemplate>
<HeaderStyle Font-Names="Tahoma" Font-Size="12px" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Top" Width="10%" />
</asp:TemplateField>
</Columns>
<SelectedRowStyle BorderStyle="Outset" />
<HeaderStyle BackColor="C#‎‎‎‎‎‎‎0D2EA" Font-Bold="True" Font-Names="Times New Roman"
Font-Size="12pt" />
<EditRowStyle HorizontalAlign="Center" VerticalAlign="Top" />
<AlternatingRowStyle BackColor="C#‎‎‎‎‎‎‎CCCCC" BorderColor="White"
BorderStyle="Ridge" BorderWidth="1px" Height="30px" HorizontalAlign="Center"
VerticalAlign="Middle" />
</asp:GridView>

</td>
</tr>
</table>


بخش کد C#‎‎‎‎‎‎‎:


تعریف متغیر :

DataClassesDataContext db = new DataClassesDataContext();

private static List<Hamian> ls;

کد :


protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ls = (from ne in db.Hamians
//where ne.enable
select ne).ToList();
GridView1.DataSource = ls;
GridView1.DataBind();
}
}

milad222
یک شنبه 03 مهر 1390, 01:40 صبح
سلام.
میشه بجای ذخیره ی عکس تو پایگاه داده، اون رو توی کامپیوتر ذخیره کنیم و از آدرس اون استفاده کنیم.
به عنوان مثال:
OpenFileDialog OF = new OpenFileDialog();
OF.ShowDialog();
string s1 = OF.FileName;
PictureBox.Image = Image.FromFile(@s1);

آخه تو یکی از کتاب های آموزش پایگاه داده نوشته بود بدلیل سنگین شدن پایگاه، مایکروسافت قراره نوع متغیری که برای این کار استفاده میشه رو از توی پایگاه داده برداره.

adineh67
شنبه 16 اسفند 1393, 08:43 صبح
سلام به همگی
ببخشید من عکسامو به باینری تبدیل کردم و تو بانک ذخیره کردم حالا میخوام همه اونارو بخونم و تو برنامم نشون بدم ممنون میشم راهنماییم کنید که با linq چطوری تمام عکسهای تو جدولم رو بخونم