نمایش نتایج 1 تا 11 از 11

نام تاپیک: ذخیره انواع فایلها بصورت باینری

  1. #1

    Question ذخیره انواع فایلها بصورت باینری

    می خوام فایلهایی از هر نوعی را درون دیتا بیس ذخیره کنم. به این نتیجه رسیدم باید انها را در فیلدی از نوع باینری ذخیره کنم اما نمی دانم این فایلها را چگونه این فیلد بفرستم.در ضمن سعی کردم با باینری ریدر انها را باینری کنم که باینری کردم ولی موقع ذخیره در دیتا بیس از این حروف باینری ایراد گرفت. خواستم موقع اینسرت کردن کانورت تو باینری کنم بازم ایراد گرفت. چی پیشنهاد مکنید؟

  2. #2
    کاربر تازه وارد آواتار darvishiali
    تاریخ عضویت
    آبان 1385
    محل زندگی
    شیراز
    پست
    61
    سلام؛

    اگر حجم فایلتون از 8 کیلوبایت کمتره، از نوع داده های binary و varbinary استفاده کنید. اگر از 8 کیلوبایت بزرگتره، از نوع داده image استفاده کنید.
    برای تغییر داده این نوع فیلدها باید از توابع WRITETEXT و UPDATETEXT استفاده کنید که توی BOL مفصلا توضیح داده.

    ولی پیشنهاد می کنم برای تبدیل فایلهای مختلف به فرمت باینری برای ذخیره در این نوع فیلدها، در لایه Application از DataBase Obejct های مختلف مثل ADO استفاده کنید.

  3. #3
    اگر از SQL Server 2005 استفاده میکنید، VARBINARY MAX جایگزین IMAGE هستش

  4. #4
    با تشکر از راهنمایی هاتون اما مشکل من وارد کردن فایل (مثلا exe) داخل فیلدی از نوع باینری هست اگر لطف کنید و نمونه کد دستور sql برای وارد کردن فایل به جدول را برام بذارید ممنون می شم. چون هر دستوری می نویسم موقع insert کردن ازم ایراد می گیره. موقع insert کردن توی value چی قرار بدم. ادرس فایل یا کد باینری شده یا چی ... ممنون

  5. #5
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    شما باید از OpenRowSet در 2005 استفاده کنید

    INSERT INTO myTable(ExeFile)
    SELECT * FROM
    OPENROWSET(BULK N'C:\FileName.Exe', SINGLE_BLOB)
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  6. #6

    Lightbulb

    جناب whithhat از راهنمایتون ممنون . این فیلد باید از نوع varbinary باشد؟ اگر ممکنه بگید حالا چجوری از دیتابیس اینو بخونیم. در ضمن من تو msdn که نگاه کردم بنظرم اومد دستور bulk insert برای وارد کردن اطلاعات یک فایل با فرمت های خاص درون فیلدهای sqlserver هست یعنی با یک فایل چندین رکورد به دیتا بیس اضافه کنیم مثلا یک فایل متنی داریم که توی اون نام و نام خانوادگی چندین نفر را داریم حالا می خواهیم هر نام و نام خانوادگی را درون یک فیلد ببریم نه ذخیره یک فایل درون یک فیلد. اگر اطلاعاتی دارید راهنمایم کنید. ممنون

  7. #7
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    برای ذخیره کردن یک فایل باینری بهتره از varbinary(MAX) l استفاده کنید.پروژه ای اخیرا انجام دادم که محبور بودم یک فایل EXE را در DB ذخیره و سپس بازیابی کنم . اگر می خواهید یک فایل را بخوانید باید از همین روش استفاده کنید . اگر می خواهید این کار را از طریق برنامه نویسی (نه SP) انجام دهید می توانید از یک Insert ساده و با پارامتر استفاده کنید مثلا در C#‎

    SqlCommand cmd =new SqlCommand("insert into MyTable(ExeFile) VALUES(@ExeFile)");
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("Imagen", MyFileStream).SqlDbType = SqlDbType.Image;
    cmd.ExecuteNonQuery();
    اما ظاهرا شما می خواهید که محتویات فایل را در DB ذخیره کنید ، که این کار بحثش جداست. شما باید بر اساس فرمت فایل آیتم های مورد نیاز را در آورید و سپس آن ها را ذخیره کنید.اگر هدف شما نام و نام خانوادگی از یک فایل است باید دو فیلد Varchar مثلا 100 (بسته به اندازه فیلد ها) بگیرید و فایل را باز کنید ، تک تک نام ها را گرفته و در DB ذخیره کنید.
    (اگر می خواهید یک فایل را از DB با برنامه نویسی فراخوانی کنید بگویید تا توضیح دهم)
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  8. #8

    Cool

    مسائل با هم قاطی شدن بگذارید یک بار دیگه موضوع را طرح کنم من می خواهم هر نوع فایلی اصلا مهم نیست عکس متن یا اجرایی باشه (هر فایلی) را درون دیتا بیس قرار بدهم و دوباره در هنگام نیاز باز خوانی کنم. (مثل افزودن فایل در یاهو به ایمیلها و برداشت انها در هنگام نیاز) برنامه من هم vb و دیتا بیس هم sql server2005 هست.
    چه راهی پیشنهاد می کنید؟ و اون موضوعی که راجع به نام و نام خانوادگی گفتم برداشت من از دستور bulk insert بود و ربطی به موضوع نداشت. اگر یک راهنمایی کلی بکنید ممنون می شم. ایا باید از همان راههایی که در بالا گفتید استفاده کنم یعنی یک فیلد از نوع باینری درون دیتابیس بسازم و با دستور openrowest فایل رو وارد فیلد کنم؟ و با همون دستور اخری از دیتابیس بخونمشون؟یا...

  9. #9
    مدیر بخش آواتار whitehat
    تاریخ عضویت
    مهر 1382
    محل زندگی
    شیراز
    پست
    2,175
    مسائل با هم قاطی شدن بگذارید یک بار دیگه موضوع را طرح کنم من می خواهم هر نوع فایلی اصلا مهم نیست عکس متن یا اجرایی باشه (هر فایلی) را درون دیتا بیس قرار بدهم و دوباره در هنگام نیاز باز خوانی کنم. (مثل افزودن فایل در یاهو به ایمیلها و برداشت انها در هنگام نیاز) برنامه من هم vb و دیتا بیس هم sql server2005 هست. چه راهی پیشنهاد می کنید؟
    برای اینکه موضوع ها با هم قاطی نشوند اول این مورد را جواب می دهم. من فرض می کنم شما فقط می خواهید از طریق برنامه نویسی این کار را انجام دهید و از SP استفاده نمی کنید .(برای انتقال فایل با استفاده از SP می بایست فایل در سرور موجود باشه یا آنرا به نحوی به انجا بفرستید)
    1- ابتدا یک جدول با یک فیلد Varbinary Max و یک ID برای کلید اصلی در نظر می گیرید (بقیه فیلد های مورد نیاز را خودتان اضافه کنید)
    برای ذخیره در DB کافیه فایل را بصورت یک Stream بخوانید ، مهم نیست که فایل شما Text باشه یا Binary . با هر تابعی که خروجی آن []byte (آرایه ای از بایتها) است (معمولا من از Stream استفاده می کنم) این فایل را بخوانید و مقدار خوانده شده را در کد پست قبلی به جای MyFileStream قرار دهید. با اجرا کد فایل در DB دخیره می شود.
    برای باز یابی می توانید از کد زیر استفاده کنید (متاسفانه با VB زیاد آشنایی ندارم آنرا یا #C می نویسم و تبدیلش را به عهده شما می گذارم )

    SqlCommand cmd = new SqlCommand("Select ExeFile From MyTable Where Id=@Id");
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@Id", YourFileId).SqlDbType=SqlDbType.Int;
    byte[] MyFile = (byte[])this.cmd.ExecuteScalar();
    System.IO.File.WriteAllBytes(@"C:\YourFolder",MyFi le);
    در کد بالا می توانید شرط Where را بر اساس فیلد هایی که ساختید تغییر دهید. در ضمن پیشنهاد می کنم از یک Thread برای این کار استفاده کنید تا در زمان اجرای کد برنامه شما Freeze نشود.
    در مورد سوال دوم اگر توضیح من ناکافی است بهتره یک موضوع جدید بسازید و دقیقا مشخص کنید چه کاری می خواهید انجام دهید تا موضوع ها با هم قاطی نشود
    موفق باشید

    کلمات کلیدی : Insert Image File - ذخیره عکس - ذخیره فایل - بازیابی عکس - بازیابی فایل
    To follow the path:
    Look to the master
    Follow the master
    Walk with the master
    See through the master
    Become the master

  10. #10
    فکر کنم فهمیدم چی شد ممنون..

  11. #11
    کاربر دائمی آواتار pesare_ariyayi
    تاریخ عضویت
    مهر 1386
    محل زندگی
    ملودی شهر باران
    پست
    108

    نقل قول: ذخیره انواع فایلها بصورت باینری

    دوستان من هم مشکلی در همین رابطه دارم. اما می خوام بدونم که چطور باید یک فایل رو به BYTE[] تبدیل کنم؟

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •