View Full Version : نوع داده FileStream
mandagarana
پنج شنبه 21 بهمن 1395, 16:08 عصر
با سلام
لطفا در مورد نوع داده FileStream توضیح بدید. اینکه چطور میشه یه فایل(مثلا pdf ) رو در SQL SERVER ذخیره کرد.
و مهمتر ازاون چطوری در #C به اون فایل دسترسی پیدا کرد.مثلا کاربر بتونه هم فایل ها رو ذخیره کنه و هم بتونه فراخوانی کنه .با زدن بروی اسم فایل pdf در دیتا گریدویو برنامه Acrobat اجرا بشه.
ممنون
حمیدرضاصادقیان
پنج شنبه 21 بهمن 1395, 18:28 عصر
سلام
این نوع داده در واقع از نسخه 2008 به بعد اضافه شد و در نسخه 2012 با اضافه شدن FileTable بر روی fileStream قابلیت های بیشتری بهش اضافه شد.
در خود File Stream نحوه کار مثل قبل هست . با فایل مثل یک Stream رفتار کرده و در دیتابیس ذخیره می کنید.
در FileTable دیگه نیازی به این روش نیست و کافیه شما فایل رو در مسیری که این جدول ایجاد شده کپی کنید. خود فایل در داخل دیتابیس اضافه میشه.
این جدول نیز به یک مسیر فیزیکی روی هارد لینک خواهد شد که اون مسیر فقط از طریق Database Engine در دسترس هست. تمامی مدیریت فایلها توسط خود SQL SErver انجام خواهد شد.
نحوه فراخوانی اونم بسیار ساده هست.
نمونه های بسیار زیادی در اینترنت هست که با یک سرچ ساده میتونید کلی سورس در مورد استفاده از FileTable پیدا کنید.
پیشنهاد میکنم که به جای FileStream از FileTable استفاده کنید که از مزایای جدیدتر اون بهره مند بشین.
mandagarana
شنبه 23 بهمن 1395, 06:10 صبح
ممنون . ولی مسئله اینجاست امکان استفاده از نسخه 2012 فعلا برام مقدور نیست.
نمونه برنامه در مورد استفاده از FilleStream پیدا کردم ولی نتونستم چیزی زیادی بفهمم.اگه لطف کنید و توضیحی هم در مورد ذخیره فایل در SQL و هم نحوه ذخیره و فراخوانی با استفاده از #C ممنون میشم.
mandagarana
شنبه 23 بهمن 1395, 07:38 صبح
نوع داده uniqueidentifier و ()newid توی sql sever دقیقا چی هستن ؟
درضمن اگه میشه این کدها رو توضیح بدید.مال #C هستش.به خدا خیلی گیج شدم.اصلا سر در نمیارم.
con.Open();
SqlTransaction txn = con.BeginTransaction();
string sql = "SELECT fData.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT(), fName FROM MyFsTable";
SqlCommand cmd = new SqlCommand(sql, con, txn);
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
string filePath = rdr[0].ToString();
byte[] objContext = (byte[])rdr[1];
string fName = rdr[2].ToString();
SqlFileStream sfs = new SqlFileStream(filePath, objContext, System.IO.FileAccess.Read);
byte[] buffer = new byte[(int)sfs.Length];
sfs.Read(buffer, 0, buffer.Length);
sfs.Close();
// Just write all files in the table to the temp direcotory.
// This is probably not how you would do it in the real world. But this is just an example.
string filename = @"C:\Temp\" + fName;
System.IO.FileStream fs = new System.IO.FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.Write);
fs.Write(buffer, 0, buffer.Length);
fs.Flush();
fs.Close();
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.