PDA

View Full Version : سوال: ذخیره فایل PDF در SQL



jp6475
دوشنبه 18 آذر 1387, 23:29 عصر
با سلام
در SQL SErver 2005 چگونه می توان یک فایل PDF ذخیره کرد؟زبان برنامه نویسی #C لطفا مراحل را به طور کامل توضیح دهید.

Alen
سه شنبه 19 آذر 1387, 09:53 صبح
به سوالت با دانش خودم تا اونجا که می دونم جواب مبدم
ببین بگذار به فایلها به عنوان یه مقوله کلی نگاه کنیم هر فایل مجموعه ای از بایتهاست که اگر در هر ویرایشگری تایپ شود (مثل notepad) و ذخیره شود و سپس با نرم اقزار مناسب باز شود نتیجه ای یکسان به دنبال خواهد داشت ، پسوند فایل هم به عنوان یک نشانه به سیستم عامل یادآوری میکند که چه نرم افزاری به طور پیش فرض برای باز کردن این فایل مناسب است
پس حالا نحوه ذخیره کردن یک فایل (حالا عکس ، فایل word یا یک pdf) را توضیح میدهم
1- طبق آخرین مطالبی که خوندم فیلدت رو از نوع varbinary تعریف کن
2-من این کار رو می کنم که یک آرایه از نوع byte تعریف میکنم بعدش با File.ReadAllBytes کل بایتهای فایل رو میخونم بعدش با یک دستور مناسب sql که این متغیر رو به عنوان پارامتر بهش میدم بایتهای فایل رو تو table ذخیره میکنم.


public void savefile(string path)
{
byte[] filebyte;
filebyte = File.ReadAllBytes(path);
objcommand.CommandText = "insert into tablename values(id,@data)";
objcommand.Parameters.Add("@data", SqlDbType.Binary).Value=filebyte;
objconnection.Open();
objcommand.ExecuteNonQuery();
objconnection.Close();
}


در هنگام خوندن هم ابتدا با یک query مناسب مقدار مورد نظر رو از table میخونم و تو یه متغیر نگهداری میکنم بعدشم با دستور File.WriteAllBytes تمام بایتهای موجود در متغیر رو تو یه فایل منویسم و نام و پسوند مناسب رو براش انتخاب میکنم


public void readfile(string path)
{
byte[] filebyte;
objcommand.CommandText = "select data from tablename where id=" + id;
objconnection.Open();
filebyte = (byte[])objconnection.ExecuteScalar;
objconnection.Close();
File.WriteAllBytes(path, filebyte);
}


این کدها از نظر کار با db کاملا بهینه نیستند

ar.shirazi
سه شنبه 19 آذر 1387, 13:59 عصر
البته اگر از Sql server 2005 یا sql server 2008 استفاده میکنید، استفاده از فیلد Varbinary به جای image جالبتر و تا جایی که من میدانم بهینه تر است .

Alen
سه شنبه 19 آذر 1387, 18:40 عصر
البته اگر از Sql server 2005 یا sql server 2008 استفاده میکنید، استفاده از فیلد Varbinary به جای image جالبتر و تا جایی که من میدانم بهینه تر است .

بله حق با دوستمونه در اون مورد من اشتباه کردم که تو پست قبلیم هم اصلاحش کردم

jp6475
جمعه 22 آذر 1387, 11:01 صبح
با سلام و تشکر از کاربر Alen
اگه میشه در مورد کد بالا توضیح بیشتری بدهید.

niloofar norouzi
جمعه 22 آذر 1387, 11:44 صبح
با سلام
در SQL SErver 2005 چگونه می توان یک فایل PDF ذخیره کرد؟زبان برنامه نویسی #C لطفا مراحل را به طور کامل توضیح دهید.

http://sql.codeproject.com/KB/database/FileStore2DataBase.aspx
http://chiragrdarji.wordpress.com/2007/08/31/storing-and-retrieving-docpdfxls-files-in-sql-server/

Alen
جمعه 22 آذر 1387, 17:07 عصر
با سلام و تشکر از کاربر Alen
اگه میشه در مورد کد بالا توضیح بیشتری بدهید.

دوست عزیزم توضیح خیلی خاصی نداره جریان کار خیلی ساده و روشنه ولی یر روی چشم
فایل مجموعه ای از بایتها است، پس یه آرایه از نوع بایت داریم که با دستور ReadAllBytes که مسیر ونام فایل رو در قالب رشته به عنوان پارامتر ورودی دریافت میکنه و محتویات فایل رو در قالب یک آرایه از بایت برمی گردونه محتویات فایل خوانده می شه و در آرایه مورد نظر ما قرار میگیره . بعدم این آرایه رو به عنوان یه پارامتر به دستور Sql می هیم تا محتویات در داخل table ذخیره بشه.
در موقع خواندن هم دقیقا عکسش عمل میکنیم یعنی محتویات فیلد رو با یه Query مناسب می خونیم بعد مقدارش رو که در قالب object است تبدیل به آرایه ای از نوع byte می کنیم و سپس محتویات این آرایه رو توسط دستور WriteAllBytes که مسیر و نام فایل رو در قالب رشته دریافت میکنه (فایل رو در مسیر مورد نظر ما ایجاد می کنه) درون فایل مورد نظرمان کپی میکنیم
امیدوارم کافی بوده باشه