PDA

View Full Version : سوال: ذخیره و فراخوانی فایل



mr_nakhaie
پنج شنبه 18 تیر 1394, 00:07 صبح
سلام دوستان عزیز
ممنون میشم که راهنماییم کنید
من یک پروژه کتابخونه دیجیتال شروع کردم که علاوه بر سرچ، درج و حذف اطلاعات کتاب از دیتابیس، فایل خود کتاب (PDF) هم میخواهم ذخیره و فراخوان بشه.
حالا مشکل من در قسمت ذخیره کتاب است که از چه روشی باید استفاده کنم که بعدش از طریق سرچ و اطلاعات کتاب در گرید ویو بتونم فایل کتاب مربوطه را اجرا کنم.

داخل دیتابیس (اکسس) از OLE Object استفاده کردم.

mohsen.a.s.95
پنج شنبه 18 تیر 1394, 00:16 صبح
منظورتون چیه از این که کتاب رو میخاید ذخیره کنید؟

mr_nakhaie
پنج شنبه 18 تیر 1394, 00:32 صبح
یعنی فایل PDF کتاب همراه با اطلاعاتش (مثل نام کتاب و نویسنده و...) داخل دیتابیس ذخیره بشه.

TeacherMath
پنج شنبه 18 تیر 1394, 00:38 صبح
فایل های مربوط به کتاب رو باید در یک پوشه ذخیره کنید وفقط ادرس آن را در دیتابیس ذخیره کنید.

mr_nakhaie
پنج شنبه 18 تیر 1394, 00:47 صبح
خوب این کار درست. چجوری داخل پوشه بریزم که بعدا از داخل برنامه توسط گرید ویو بشه کتاب رو اجرا کرد؟

pbm_soy
پنج شنبه 18 تیر 1394, 00:57 صبح
البته فایل کتاب را هم میتوانید در دیتابیس در فیلدهایی از نوع فایل یا باینری ذخیره کنید
ولی احتمالا مشکل بالا رفتن حجم دیتابیس را خواهید داشت بعلاوه مشکل جستجو کردن در محتوای فایل خواهید داشت

mr_nakhaie
پنج شنبه 18 تیر 1394, 01:05 صبح
اشکال نداره حجم بالا بره. پروژه دانشجوییه و میخوام فقط تحویل بدم. (البته درست کار کنه :لبخند:)

محمد رضا فاتحی
پنج شنبه 18 تیر 1394, 08:15 صبح
از این دو تا تابع می تونید استفاده کنید

protected static byte[] ReadFileToByteArray(string fileName)
{


FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read);
long len;
len = fileStream.Length;
Byte[] fileAsByte = new Byte[len];
fileStream.Read(fileAsByte, 0, fileAsByte.Length);
MemoryStream memoryStream = new MemoryStream(fileAsByte);
return memoryStream.ToArray();


}
public void FileStoreToDataBase(byte[] content, string fileName)
{
SqlConnection con = new SqlConnection();
try
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}
SqlCommand insert = new SqlCommand("insert into table (data) values (@data)", con);
insert.Parameters.AddWithValue("data", content);


// data.Value = content;

insert.ExecuteNonQuery();
}
finally
{
con.Close();
}
}

mr_nakhaie
جمعه 19 تیر 1394, 13:28 عصر
دوستان ممنونم از نظراتتون
من یک توضیح کامل تری بدم.

من بانکم اکسس است.
من یک شکلی جزعی از طرح کلی میزارم و توضیحاتشو میگم خدمتتون.

133106

من دوتا صفت در این شکل گذاشتم برای ذخیره
یک دکمه برای برای گرفتن آدرس فایل (PDF)
یک دکمه که نام و نویسنده کتاب همراه با فایل را به صورت باینری ذخیره کند.
بعد ذخیره داخل گرید ویو به نمایش در میاد.
روی اطلاعات کتاب مورد نظر کلیک میکنیم.
شماره ID اون کتاب که منحصر به فرده میاد روی لیبلی که مشخص شده
سپس دکمه خواندن را بزنیم و کتاب اجرا شود.

حالا من کدای مربوط به ذخیره اولیه و بعد خواندن کتاب رو نمیدونم.
ممنون میشم راهنمایی کنید من زیاد وارد نیستم.

mr_nakhaie
یک شنبه 21 تیر 1394, 16:53 عصر
ممنونم از آقا رضا فاتحی که جواب بنده رو دادن
الان سیو کردنم درست شد حالا میخوام این برنامه توسط برنامه Adobe reader در خارج از برنامه سی شارپم اجرا بشه.
این کد رو برای انتخاب فایل مورد نظر از دیتابیس نوشتم.

cmd.Connection = con;
cmd.CommandText = "SELECT * FROM Page where ID = @p1";
cmd.Parameters.AddWithValue("@p1", label3.Text);
adp.SelectCommand = cmd;
adp.Fill(dt);
byte[] b =(byte[])dt.Rows[0][3];

حالا نمیدونم دستور اجرا کردنش چیه.
ممنون میشم کمک کنید.

محمد رضا فاتحی
دوشنبه 22 تیر 1394, 07:36 صبح
این کار رو می تونید انجام بدید

FileStream fs = new FileStream(filename, FileMode.Create);
fs.Write(b, 0, System.Convert.ToInt32(b.Length));
fs.Seek(0, SeekOrigin.Begin);
fs.Close();
ProcessStartInfo psi = new ProcessStartInfo(filename);
Process.Start(psi);