PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ذخیره تصاویر در SQL Server



TAHA
11-24-2009, 09:18 PM
چند روز پیش یکی از دوستانم در دانشگاه از من سوالی در مورد نحوه ذخیره تصاویر در SQL Server پرسید. من می دانستم که نوع داده ای image برای انجام این کار استفاده می شود ولی هیچ گاه از آن استفاده نکرده بودم و بنابراین هیچ ایده ای از نحوه ارسال اطلاعات برای ذخیره شدن در بانک اطلاعاتی نداشتم. فردای آن روز ایمیلی به دوستم زدم و لینک یک مقاله خوب از codeproject (http://www.codeprojcet.com/) را برایش فرستادم که نحوه انجام این کار را توضیح می داد. به نظرم آمد که آن مقاله را برای وبلاگم هم ترجمه کنم. این مقاله یک سورس هم دارد که می توانید آن را از اینجا (http://www.saeedi.persiangig.com/blog/PicManager.zip) دانلود کنید.

مرور راه حل
به طور معمول، تصاویر در پوشه های روی وب سرور ذخیره می شوند نه در دیتابیس، این اما برای فایل های با حجم بالاست. در بعضی موارد ، مثلا یک بانک ، آن ها از تصویر امضای مشتری اسکن می گیرند و آن را در بانک اطلاعاتی خود ذخیره می کنند.

- الگوی بانک اطلاعاتی مورد استفاده : مایکروسافت SQL Server 2000 را به عنوان بانک اطلاعاتی استفاده می کنیم، من از نوع داده ای image استفاده خواهم کرد. نوع داده ای image برای ذخیره کردن تصاویر در بانک اطلاعاتی استفاده می شود.
- کنترل هایی که در این برنامه از آن ها استفاده می کنیم عبارتند از : System.Web.UI.HtmlControls.HtmlInputFile و System.Web.UI.WebControls.TextBox و System.Web.UI.WebControls.Button
-و فضا نام هایی که در این برنامه از آن ها استفاده می کنیم عبارتند از: System.Data.SqlClient و System.Drawing و System.Data و System.IO و System.Drawing.Imaging
راه حل همراه با کد
از کلاس HtmlInputFile برای ساختن کنترل آپلود فایل استفاده می کنیم. مثال زیر یک فایل ASPX کامل است که به کاربر این امکان را می دهد که یک تصویر و توضیح آن را آپلود و به بانک اطلاعاتی اضافه کند . متد OnUpload تصویر و توضیح آن را در یک جدول بانک اطلاعاتی SQL Server به نام Pictures در دیتابیس MyData اضافه می کند.


// سورس کد ذخیره تصویر در بانک اطلاعاتی



public void OnUpload(Object sender, EventArgs e)

{

//

ساختن یک byte[] از فایل ورودی


int len = Upload.PostedFile.ContentLength;

byte[] pic = new byte[len];

Upload.PostedFile.InputStream.Read (pic, 0, len);

//

افزودن تصویر و توضیح تصویر به بانک اطلاعاتی


SqlConnection connection = new

SqlConnection (@"server=127.0.0.1;database=MyData;uid=sa;pwd=yourpa ss");

try

{

connection.Open ();

SqlCommand cmd = new SqlCommand ("insert into Image "

+ "(Picture, Comment) values (@pic, @text)", connection);

cmd.Parameters.Add ("@pic", pic);

cmd.Parameters.Add ("@text", Comment.Text);

cmd.ExecuteNonQuery ();

}

finally

{

connection.Close ();

}

}


تابعی که در بالا معرفی کردیم توسط ویژگی OnClick یک دکمه فراخوانی می شود.

چگونه می توانم یک تصویر را از دیتابیس خوانده و در صفحه وب نمایش دهم؟

اینجا من از یک صفحه وب برای نمایش تصویر استفاده کرده ام، کد زیر برای نمایش تصویر در صفحه وب استفاده می شود


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 ();

}

}



توابع GDI+ ویژگی های پیشرفته زیادی برای مدیریت و دستکاری داده های تصویری پیشنهاد می کنند. مثال این مقاله نگاه سریعی به کارهایی که از طریق فضا نام های System.Drawing.Imaging و System.Drawing می توانید انجام دهید دارد. به عنوان مثال شما می توانید برنامه را برای ذخیره و مدیریت تصاویر بر روی وب گسترش دهید یا می توانید یک برنامه ساده بنویسید که به کاربر امکان ویرایش و دستکاری تصاویر را می دهد.

چگونه از این کدها استفاده کنیم؟

برای دریافت سورس پروژه اینجا (http://www.saeedi.persiangig.com/blog/PicManager.zip) کلیک کنید. ابتدا یک دایرکتوری مجازی بسازید و فایل های پروژه را در آن قرار بدهید ، سپس رشته اتصال به بانک اطلاعاتی را تغییر دهید ( بر اساس سرور و نام کاربری و کلمه عبور و نام دیتابیس خودتان آن را ست کنید ) حالا می توانید از این پروژه استفاده کنید.