PDA

View Full Version : بازیابی عکس از SQL و قرار دادن آن در کادر مربوطه



fazel-d
چهارشنبه 30 بهمن 1387, 02:00 صبح
این هم کد های ذخیره و بازیابی عکس از دیتابیس


int upLength = up.PostedFile.ContentLength;
byte[] picByte = new byte[upLength];

//txt.Text = up.PostedFile.ContentLength.ToString();
up.PostedFile.InputStream.Read(picByte, 0, upLength);

SqlConnection connect = new SqlConnection(@"Data source=.\SQLEXPRESS; integrated security=true; initial catalog=Digital Library");

SqlCommand com = new SqlCommand("insert into Employement (Id_Employee,image) values (@id,@image)", connect);

SqlParameter param = new SqlParameter("@image", picByte);
com.Parameters.Add(param);
param = new SqlParameter("@id", txt.Text);
com.Parameters.Add(param);

connect.Open();
com.ExecuteNonQuery();
connect.Close();


//retreive
System.IO.MemoryStream ms = new MemoryStream();
com = new SqlCommand("select image from Employement where Id_Employee=@id", connect);
param = new SqlParameter("@id", txt.Text);

com.Parameters.Add(param);

connect.Open();
byte[] img = (byte[])com.ExecuteScalar();
connect.Close();

ms.Write(img, 0, img.Length);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(ms);
Response.ContentType = "image/gif";
bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
ms.Close();اما من می خوام که عکس رو مثلا در یه کادر / حالا یا تگ img یا هر چیز دیگری که بتوانم دیگر اطلاعات مربوطه از همان رکوردی که عکس را شامل می شود / مثل نام و نام خانوادگی کاربر و ... را بیاورم
مثل همین سایت که عکس Upload می شه و در یه کادر قابل روئت است

fazel-d
سه شنبه 06 اسفند 1387, 01:58 صبح
یه جایی که الان خاطرم نیست دیدم که عکس رو توی GridView لود کرده بود

سعی دارم توی نسخه بعدی پروژه ام این امکان رو برای کاربر ایجاد کنم.
لطفا راهنمایی بفرمایید

arian_P
چهارشنبه 07 اسفند 1387, 15:57 عصر
فکر می کنم مشکل من هم شبیه همین سوال شما باشه
من می خوام عکسی رو که داخل دیتا بیس ذخیره کردم رو بخونم و داخل کنترل image نشون بدم نه داخل یه صفحه دیگه و نه داخل گرید ویو ، وقتی از کد شما استفاده کردم روی خط زیر:



ms.Write(img, 0, img.Length);

خطای زیر رو میده

Object reference not set to an instance of an object
اگه میدونین خطاش به خاطره چیه ، میشه راهنمائیم کنین ممنون

asigoljon
چهارشنبه 07 اسفند 1387, 22:44 عصر
سلام
ميشه توضيح بديد چه جوري ميشه يه عكس رو كه اسمش توي بانك ذخيره شده رو بازيابي كرد ؟؟؟؟؟وداخل کنترل buttonimage نشون داد وا داخل گرید ویو ،جلوي مشخصات هر كاربر عكس خود كاربر هم باشه من اسم عكس هاي اپلود شده رو توي بانك و خود عكس رو جدا توي يه شاخه ذخيره كردم اگه كمك كنيد ممنون ميشم...........:قلب:

mh19842008
پنج شنبه 08 اسفند 1387, 17:16 عصر
سلام
به نظرم این مسئله مطرح شده
برای نمایش در گرید ویو اول اینو بگم کارت راحتره اگه مسیر با نام عکس ذخیره بشه
بعد یک image field بذار و dataimageurklfield برابر فیلد ذخیره عکست قرار بده البته میتونی یک templatefield ایجاد کنی ودر item template اون یک image بذاری وبه فیلد مسیر تصویرت بایند کنی
برای نمایش در image button هم مقدار این فیلد رو واکشی کن و به imageurl نسبت بده

arian_P
شنبه 10 اسفند 1387, 10:45 صبح
جناب fazel-d میشه بفرمائین شما بالاخره مشکلتون حل شد یا نه؟
لطفاً از دوستان اگر کسی جواب این سوالو می دونه راهنمایی کنه...ممنون می شم

milade
شنبه 10 اسفند 1387, 13:11 عصر
سلام
یه راهنمایی میکنم خودتون برید دنبالش ( کم بود وقت ! )
استریم ذخیره کنید ، برا نمایش پاس بدید یه فایل Ashx و عکس رو استریم بکشید بیرون و با هر کنترلی نمایش بدید !!!!!!!!!!!!!!!!!!!!!!
عجب راهنمایی توپی !
عمرا" اگه فهمیده باشید ( قول 99% )
اما در کل اگه وقت کردم بهتون کمک میکنم تا 2 روز دیگه ( اگه کارتون نشد PM بزارید ( بعد از دو روز ) )
شرمنده ....
موفق باشید
خداحافظ

mh19842008
شنبه 10 اسفند 1387, 14:23 عصر
سلام
من از این روش استفاده نمیکنم
ببین این بدردت میخوره
شاید کمی کمک کنه

fazel-d
پنج شنبه 29 اسفند 1387, 19:12 عصر
خوب شما می تونید توی یه سایتی که مخصوص آپلود فایل هست این کار رو بکنید . مثل 4Share و یا سایتی که توی امضام هست ▼

اما در مورد سوال خودم. این رو بگم که من عکس ها رو توی پوشه ذخیره می کنم و آدرس و اسامی عکس ها رو به صورت ID وار + ID در بانک ذخیره می کنم :

Pic[1]a

با صرف نظر از حرف a / چرا که مثال بالا به هم می ریخت / a رو گذاشتم.

بعد در Gridview یه image داخل تگهاش قرار می دم و آدرس image رو برابر با C:\pictures\pic[id قرار می دم که ID از بانک خونده می شه.

mrmohsen
دوشنبه 29 تیر 1388, 00:55 صبح
با سلام خدمت همه دوستان مشکل بنده هم همینه ولی متاسفانه این تاپیک هم نتونست کمکم کنه در بازیابی عکس که البته از دو روش استفاده کردم
روش اول که باینری می کنم و ذخیره می کنم
روش دوم با ذخیره آدرس نه خود عکس تو دیتا بیس

حالا من وقتی که از روش اول استفاده می کنم تو ذخیره کردن مشکلی ندارم ولی موقع بازیابی که میخوام داخل کنترل Image قراربدم نمیتونم[


MemoryStream stream = new MemoryStream ();
SqlConnection connection = new SqlConnection (@"server=mohsen\pc;database=FC;uid=sa;pwd=123");
try
{
connection.Open ();
SqlCommand command = new SqlCommand ("select Picture from Image", connection);
byte[] image = (byte[]) command.ExecuteScalar ();
stream.Write (image, 0, image.Length);
Bitmap bitmap = new Bitmap (stream);
Response.ContentType = "image/gif";
bitmap.Save (Response.OutputStream, ImageFormat.Gif);
}
finally
{
connection.Close ();
stream.Close ();

}
این کد معمولی بازیابی میکنه میخوام داخل وب کنترل باشه؟

khorsandreza
دوشنبه 29 تیر 1388, 17:55 عصر
این همه یک نمونه ذخیره بازیابی تصویر در محل
بخش کد مربوط به این تایپک میباشه
صرفا رفع مشکل احتمالی

SS^T^NN
سه شنبه 30 تیر 1388, 11:15 صبح
دوستان عزیز خواهشن کمکم کنید من میخوام عکس به روش دوم شما یعنی در بانک فقط آدرس عکس باشه و خود عکس تو فولدر دیگه تو هارد ، من چه طوری میتونم مشخص کنم که مثلا تو درایو E:\pic باشه ؟؟
چه طوری این دستور تغییر بدم :
WriteToFile(Server.MapPath(strFilename), ref myData);

private void WriteToFile(string strPath, ref byte[] Buffer)
{
// Create a file
FileStream newFile = new FileStream(strPath, FileMode.Create);

// Write data to the file
newFile.Write(Buffer, 0, Buffer.Length);

// Close file
newFile.Close();
}

khorsandreza
سه شنبه 30 تیر 1388, 12:01 عصر
دوست من این قسمت از برنامخ کاربردی خودم و حالا هم کار میکنه


SqlConnection con = new SqlConnection(مسیر کانکش دیتا بیس);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = string.Format("Select * from MainData Where code='{0}'", xcode);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
ConsUnit cvdate = new ConsUnit();
TextBox1.Text = (string)dr["CODE"].ToString();
string UrlImage = "~/UpLoadFolder/" + (string)dr["CODE"].ToString();
Image2.ImageUrl = UrlImage + ".jpg";

من تصویر فرد را بر اساس کد پرسنلی اش ذخیره می کنم و روشم به این صورت است که هر وقت برای فردی اپلود میشود نام فایل تصویر به کد پرسنلی تغییر یافته و در پوشه مورد نظرم در سرور ذخیره میشود

khorsandreza
سه شنبه 30 تیر 1388, 12:09 عصر
تذکر : بهتره که فیلدی که مسیر تصویر را ذخیره میکنی از نوع (50)nvarchar باشه

karim orooji
سه شنبه 30 تیر 1388, 12:35 عصر
با سلام به دوستان
اينم يك برنامه ذخيره عكس در پوشه و مسيرش در بانك ذخيره ميشه
و ميتونه لودش هم بكنه


ساخت بانكش هم با خودتون

مهدی کرامتی
سه شنبه 30 تیر 1388, 13:15 عصر
شما میبایست یک صفحه مانند مثال خودتان داشته باشید که خروجی اش فقط تصویر باشد، سپس در صفحه دیگری که قرار است تصویر نمایش داده شود یک کامپوننت Image بگذارید و در مشخصه ImageURL آن آدرس صفحه فوق الذکر را بدهید.

نمونه انجام این کار را می توانید در اینجا ببینید: http://www.codeproject.com/KB/aspnet/ImageInDatabase.aspx

khorsandreza
سه شنبه 30 تیر 1388, 13:43 عصر
با تشکر از راهنمائی دوست عزیز DelphiAssistant اصلاح نسخه اصلاح شده که قبلا به یکی از دوستان ارسال شده بود برایت پست کردم

لازم به توضیح سورس از همین سایت است فقط کاربردی تر شده

SS^T^NN
سه شنبه 30 تیر 1388, 13:57 عصر
http://www.tinypic.info/files/bua87450xqymetvs4zxn.png

من توی کتابخانه دیجیتالی میخوام یک همچین چیزی پییاده کنم ، همونطور که میبینید عکس هر کتاب در کنار لینک دانلود آورده شده ، می خوام نظر شما رو بدونم ، من اگه عکس مستقیما تو sql server ذخیره کنم و بعد کتابهام که به فرمت pdf , zip , rar هستن فقط آدرسشون تو sql sever بزارم و خودشون تو server (منظور مثلا تو یه درایو دیگه) چه طوره ؟ می خوام همه اینها تو gridview باشه ؟

مهدی کرامتی
سه شنبه 30 تیر 1388, 18:54 عصر
بهتره خود تصاویر هم خارج از SQL Server باشند (در یک فولدر) و فقط آدرس شون در دیتابیس ذخیره بشه.

اگر قرار باشه فایل ها در یک فولدر دیگه غیر از فولدر برنامه ذخیره شوند:
1- اون فولدر میبایست از طریق یک آدرس وب (URL) قابل دسترس باشه.
2- برنامه شما میبایست به اون فولدر دسترسی خواندن/نوشتن داشته باشه.

SS^T^NN
چهارشنبه 31 تیر 1388, 01:17 صبح
بهتره خود تصاویر هم خارج از SQL Server باشند (در یک فولدر) و فقط آدرس شون در دیتابیس ذخیره بشه.

اگر قرار باشه فایل ها در یک فولدر دیگه غیر از فولدر برنامه ذخیره شوند:
1- اون فولدر میبایست از طریق یک آدرس وب (URL) قابل دسترس باشه.
2- برنامه شما میبایست به اون فولدر دسترسی خواندن/نوشتن داشته باشه.

با سپاس از راهنمایی دقیق شما ، دقیقا من همچن چیزیرو میخوام که شما فرمودین ، یعنی اینکه اگر پروژه من به عنوان مثال تو درایو D هست وبخوام برای ذخیره تصاویر وفایلهای pdf تو درایو دیگه مثلا E ذخیره کنم ، باید طبق فرمایش شما ( اون فولدر میبایست از طریق یک آدرس وب (URL) قابل دسترس باشه. )
اگه ممکن هست میشه یه مثال کوچیک بزنین که چه طور اون فولدر تو درایو دیگر را به عنوان یک url بشناسونم ؟ با زبان C#
سوال بعدی اینکه فرمودید آدرس ذخیره کنم یعنی چی ؟ این آدرس چی هست ، من تازه کار هستم با مثال ساده بگین ممنون میشم.

SS^T^NN
پنج شنبه 01 مرداد 1388, 11:09 صبح
دوستان عزیز اگه امکان داره ، میشه لطف کنید یه برنامه ساده به زبان C# این جا بزارین. من میخوام یه سری مقاله که با فرمت ههای pdf,zip,rar هست را در یک gridview ،با نمایش یک لینک دانلود قرار بدم (یعنی هر کس روی لینک دانلود کلیک کرد کتاب مورد نظر دانلود بشه)، خود مقالات در یک فولدر هستند و فقط آدرس مقالات در دیتابیس ذخیره میشود ، همچنین در این gridview عکس مربوط به کتاب هم قرار داده شده ، که اون هم مثل کتابا در یک فولدر هستند وفقط آدرسشان در دیتابیس ذخیره میشود، خواهش میکنم نحوه وارد کردن این اطلاعات و بازیابی آن ها در gridview نشان دهید . پروژه پایانترم هست بد جوری نیاز دارم. خواهش میکنم کمکم کنید.

mehdima
جمعه 02 مرداد 1388, 17:25 عصر
دوستان عزیز اگه امکان داره ، میشه لطف کنید یه برنامه ساده به زبان C#‎ این جا بزارین. من میخوام یه سری مقاله که با فرمت ههای pdf,zip,rar هست را در یک gridview ،با نمایش یک لینک دانلود قرار بدم (یعنی هر کس روی لینک دانلود کلیک کرد کتاب مورد نظر دانلود بشه)، خود مقالات در یک فولدر هستند و فقط آدرس مقالات در دیتابیس ذخیره میشود ، همچنین در این gridview عکس مربوط به کتاب هم قرار داده شده ، که اون هم مثل کتابا در یک فولدر هستند وفقط آدرسشان در دیتابیس ذخیره میشود، خواهش میکنم نحوه وارد کردن این اطلاعات و بازیابی آن ها در gridview نشان دهید . پروژه پایانترم هست بد جوری نیاز دارم. خواهش میکنم کمکم کنید.

با سلام

این مثال رو ببنید.متاسفانه فرصتی برای توضیح دادن ندارم باید برم خدمت(البته کاملا واضحه)

fazel-d
سه شنبه 03 شهریور 1388, 18:01 عصر
بهترین را برای قرار دادن تصاویر در GridView ، استفاده از ItemTemplate و در داخل اون ImageField است. در این روش شما نمی توانید عکس رو از داخل بانک بازیابی کنید. پس باید مسیر فایل و اگه تمامی عکس ها در یه مسیر مشخص قرار دارند ، نام عکس ها ذخیره بشن.

amir.net
چهارشنبه 04 شهریور 1388, 22:11 عصر
با تشكر از جناب DelphiAssistant كد زير را به دست آورده ام مشكل من اينه كه كد به زبان C#‎‎‎‎ است

اما پروژه من vb است
لطفا لينكي از ترجمه vb برام بزارين
هركاري كردم نتونستم اونو به vb بركردونم



private void Page_Load(object sender, System.EventArgs e)
{
MemoryStream stream = new MemoryStream ();
SqlConnection connection = new
SqlConnection (@"server=127.0.0.1;database=MyData;uid=sa;pwd=yourpa ss");
try
{
connection.Open ();
SqlCommand command = new
SqlCommand ("select Picture from Image", connection);
byte[] image = (byte[]) command.ExecuteScalar ();
stream.Write (image, 0, image.Length);
Bitmap bitmap = new Bitmap (stream);
Response.ContentType = "image/gif";
bitmap.Save (Response.OutputStream, ImageFormat.Gif);
}
finally
{
connection.Close ();
stream.Close ();





ممنون ميشم اگه كمك كنيد.

amir.net
جمعه 13 شهریور 1388, 12:57 عصر
اگه يه تصوير با فرمت tiff داشته باشيم (اونم چند صفحه) چكار بايد انجام دهيم

آيا حتماً كامپوننت ميخواهد ؟