PDA

View Full Version : سوال: اضافه کردن چندین عکس در دیتابیس sql با سی شارپ



مریم فاضل
یک شنبه 06 تیر 1395, 12:49 عصر
من میخواهم برای هر شماره کارمندی چند عدد عکس در جدول اضافه کنم . در واقع به هر نفر چند عکس اختصاص دهم ولی فقط میتوانم یک عدد عکس در جدول نشان دهم ! چه کار کنم؟

rahmatipoor
یک شنبه 06 تیر 1395, 15:38 عصر
برای ذخیره عکس کارمندها یک جدول جداگانه مثلا به اسم tblPicture درنظر بگیر.

توی اون جدول یک فیلد از نوع varbinary(max) تعریف کن برای ذخیره عکس ، یه فیلد هم از نوع int برای ذخیره ID کارمند در نظر بگیر.

عکس هر کارمندی رو که خواستی ذخیره کنی به همراه ID کارمند توی این جدول ذخیره کن

وقتی هم که خواستی بازیابی کنی با یه سلکت ساده بر اساس ID کارمند دلخواه ، همه عکسهای اون کارمند رو میتونی داشته باشی
Select * from tblPicture where ID=54545

مریم فاضل
یک شنبه 06 تیر 1395, 16:34 عصر
با سلامی دوباره. من یک جدول با دو فیلد در نظر گرفتم یکی از آنها ID و دیگری IMG اولی از نوع int و دومی از نوع (varbinary(max لذا هنگامی که تصویر اول در دیتابیس قرار می گیرد برای ذخیره تصویر دوم در دیتابیس exequtnonquery ایراد میگیرد و لذا با همان شماره آی دی فقط یک تصویر ذخیره میشود در ضمن برای بازیابی تصویر فقط همان تصویر خوانده شده و در پیکچرباکس نمایش داده میشود
لطفا اگر امکان دارد کدهای راهنمایی خود را برایم ارسال کنید و بازیابی تصویر تمام تصاویر ذخیره شده با همان آی دی در پیکچر باکس نمایش داده شود(اگر کامپوننت بهتر از پیکچرباکس موجود است به آن اشاره شود)

akpa125
یک شنبه 06 تیر 1395, 21:41 عصر
با سلامی دوباره. من یک جدول با دو فیلد در نظر گرفتم یکی از آنها ID و دیگری IMG اولی از نوع int و دومی از نوع (varbinary(max لذا هنگامی که تصویر اول در دیتابیس قرار می گیرد برای ذخیره تصویر دوم در دیتابیس exequtnonquery ایراد میگیرد و لذا با همان شماره آی دی فقط یک تصویر ذخیره میشود در ضمن برای بازیابی تصویر فقط همان تصویر خوانده شده و در پیکچرباکس نمایش داده میشود
لطفا اگر امکان دارد کدهای راهنمایی خود را برایم ارسال کنید و بازیابی تصویر تمام تصاویر ذخیره شده با همان آی دی در پیکچر باکس نمایش داده شود(اگر کامپوننت بهتر از پیکچرباکس موجود است به آن اشاره شود)
شما ستون id رو کلید اصلی قرار دادید که اشتباهه ، باید اون رو کلید خارجی بکنید و رابطه 1 به چند بین این ستون و ستون id در جدولی پرسنل ایجاد کنید

akpa125
یک شنبه 06 تیر 1395, 21:45 عصر
یه چند تا نکته رو بگم
ذخیره عکس در پایگاه داده حجم اون و طبعا کاراییش رو بشدت تحت تاثیر قرار میده بهتر طبق روشی که دوستان اشاره کردن لینک عکس رو ذخیره کنید البته میتونید قبلشه عکس رو به پوشه ای مشخص انتقال بدید و بعد لینک رو ذخیره کنید مزیت این روش علاوه بر بهینه بودن اینه که نیازی به جدول جداگانه برای ذخیره چندین عکس ندارید و میتونید چندین لینک رو با یک کارکتر جداکننده مناسب در یک ستون ذخیره کنید و کلاسی برای نمایش این لینک ها در برنامه ایجاد کنید

akpa125
یک شنبه 06 تیر 1395, 21:49 عصر
کد پرسنلی
نام
نام خانوادگی
شماره ملی
لینک عکسها


1001
علی
کمیجانی
01
C:\programdata\myfolder\a.jpg _C:\programdata\myfolder\b.jpg



اینم یه مثال از جدول فقط به جای _ از یه کارکتری استفاده کنید که در نام گذاری فایل استفاده اش مجاز نباشه یا اینکه نام عکس رو هنگام انتقال به پوشه مورد نظر عوض کنید تا شامل کارکتر _ نباشه

مریم فاضل
دوشنبه 07 تیر 1395, 00:00 صبح
کد پرسنلی
نام
نام خانوادگی
شماره ملی
لینک عکسها


1001
علی
کمیجانی
01
C:\programdata\myfolder\a.jpg _C:\programdata\myfolder\b.jpg



اینم یه مثال از جدول فقط به جای _ از یه کارکتری استفاده کنید که در نام گذاری فایل استفاده اش مجاز نباشه یا اینکه نام عکس رو هنگام انتقال به پوشه مورد نظر عوض کنید تا شامل کارکتر _ نباشه



:گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه:
من کدهای جستجو از دیتابیس از طریق شماره پرسنلی را نوشته ام ولی هنگام ذخیره تصویر فقط و فقط یک شماره پرسنلی وارد می شود و دیگر مشابه آن را exequtenonquery خطا می دهد
اگر راه حلی به من بدهید که بتوانم چند تصویر با یک شماره کارمندی در جدول ذخیره کنم بدون آدرس .فقط تصویر . زیرا می خواهم دوباره تصویر را بردارم و فقط این برنامه را در کامپیوتر خودم اجرا نکنم و در کامپیوترهای دیگر هم تصاویر قابل مشاهده باشند. اگر کد و یا هر راهنمایی دارید مرا یاری کنید سپاسگذارم:گریه::گریه::گریه:: ریه::گریه:

danialafshari
دوشنبه 07 تیر 1395, 01:43 صبح
:گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه:
من کدهای جستجو از دیتابیس از طریق شماره پرسنلی را نوشته ام ولی هنگام ذخیره تصویر فقط و فقط یک شماره پرسنلی وارد می شود و دیگر مشابه آن را exequtenonquery خطا می دهد
اگر راه حلی به من بدهید که بتوانم چند تصویر با یک شماره کارمندی در جدول ذخیره کنم بدون آدرس .فقط تصویر . زیرا می خواهم دوباره تصویر را بردارم و فقط این برنامه را در کامپیوتر خودم اجرا نکنم و در کامپیوترهای دیگر هم تصاویر قابل مشاهده باشند. اگر کد و یا هر راهنمایی دارید مرا یاری کنید سپاسگذارم:گریه::گریه::گریه:: ریه::گریه:

سلام دوست عزیز
اون جدولی که شما ساختید به یک فیلد دیگه نیازداره که مشخص بشه این عکس متعلق به کدام پرسنل هست. باید فیلد ID_Pesonel هم قرار بدید و به عنوان کلید خارجی ازش استفاده کنید
ID, ID_Pesonel, Img
ID=کلید اصلی
ID_Pesonel=کلید خارجی
دقیقا مشکلتون همینجاس
موفق باشید

مریم فاضل
دوشنبه 07 تیر 1395, 18:54 عصر
سلام دوستان یاری دهنده .
من توانستم در جدول برای هر شماره پرسنلی چند عکس اضافه کنم . الان برای سرچ که دستورات را مینویسم تا برای هر شماره پرسنلی تمام عکس ها را نشان دهد فقط عکس اول را نشان میدهد در پیکچر باکس. چه کنم ؟
:گریه:

akpa125
دوشنبه 07 تیر 1395, 22:22 عصر
سلام دوستان یاری دهنده .
من توانستم در جدول برای هر شماره پرسنلی چند عکس اضافه کنم . الان برای سرچ که دستورات را مینویسم تا برای هر شماره پرسنلی تمام عکس ها را نشان دهد فقط عکس اول را نشان میدهد در پیکچر باکس. چه کنم ؟
:گریه:
بستگی داره عکس رو در جدول چجوری ذخیره کرده باشید اگه از جدولی جدا استفاده کردید که همه عکس ها در یک ستون قرار داره میتونید با یه سلکت همه عکس ها رو داخل یه ارایه قراره بدید و ارایه رو باید کنید به پیکچر باکس و با دکمه بعدی و قبلی عکس ها رو نمایش بدین
اگرهم در ستون های مختلف قرار داره باید دونه دونه عکس ها رو از ستون ها داخل یک ارایه بریزید و نمایش بدید

مریم فاضل
دوشنبه 07 تیر 1395, 23:08 عصر
به صورت همون اولی که گفتید همه عکسها در یک ستون ذخیره شده است . من همین آرایه را تعریف کردم به صورت
do
{
byte [] b = (byte []) dt.Rows[i][1];
MemoryStream ms = new MemoryStream (b);
pictureBox1.Image = Image.fromstream(ms);
i=i+1;
} while (dt !=null);

این حلقه را در باتن سرچ تعریف کردم ولی نمیدنم چطوری با باتن های دیگر خوانده شود (منظورم باتن next و previous)
و مطمئنم حلقه در باتن سرچ به درستی اجرا میشود و مثلا به اندازه تعداد عکس ها i شمرده میشود تا زمانی که dt که همان اداپتر ما میباشد خالی شود ولی فقط تصویر اول جدول نمایش داده میشود .اکر راهی باشد که این حلقه را بتوانم به دکمه های next و previous که برعکس از i کم میکند انتقال دهم کار تمام است
:گریه:

مریم فاضل
سه شنبه 08 تیر 1395, 18:48 عصر
بستگی داره عکس رو در جدول چجوری ذخیره کرده باشید اگه از جدولی جدا استفاده کردید که همه عکس ها در یک ستون قرار داره میتونید با یه سلکت همه عکس ها رو داخل یه ارایه قراره بدید و ارایه رو باید کنید به پیکچر باکس و با دکمه بعدی و قبلی عکس ها رو نمایش بدین
اگرهم در ستون های مختلف قرار داره باید دونه دونه عکس ها رو از ستون ها داخل یک ارایه بریزید و نمایش بدید

ارایه رو باید کنید به پیکچر باکس یعنی چه؟