ورود

View Full Version : attach کردن یک فایل بیشتر از 600 مگابایت در فیلد blob یا varbinary sql server



benyaminrahimi
شنبه 14 بهمن 1391, 14:36 عصر
هنگام فراخوانی loadformfile پیغام out of memory میاد وقتی فایل بیشتر از 600 مگابایته .. کسی روشی داره ؟

hassan_reza
شنبه 14 بهمن 1391, 17:50 عصر
یه نگاهی به این (http://stackoverflow.com/questions/3247324/out-of-memory-error-as-inserting-a-600mb-files-into-sql-server-express-as-filest) بندازید.

benyaminrahimi
شنبه 14 بهمن 1391, 19:06 عصر
کار نمیکنه تست کردم

Mask
شنبه 14 بهمن 1391, 19:18 عصر
فایل رو تکه تکه کنید و بعد سر همش کنید.

benyaminrahimi
یک شنبه 15 بهمن 1391, 09:27 صبح
تو stackoverflow هم همینو گفته ولی کار نمیکنه دوست عزیز یه مثال عملی میخام اگه کسی باهاش در گیر بوده

یوسف زالی
یک شنبه 15 بهمن 1391, 13:29 عصر
منظور از کار نمی کنه اینه که سر هم نمی شه یا اون هم ارور می ده؟
اگر این حجم رو از فایل محلی لود کنی چی ؟
ممکنه تنظیمات IDE حافظه رو محدود کرده باشه.

benyaminrahimi
یک شنبه 15 بهمن 1391, 14:52 عصر
نه ارور نداره و لی فقط تکه اولو برمیداره ..میشه خودت یه نگاهی بندازی بهش ؟

یوسف زالی
دوشنبه 16 بهمن 1391, 14:15 عصر
اون مشکل به نظر می رسه که محدودیت Variant هاست.
یک راه اینه که کلاس ها و توابع مربوطه رو بازنویسی کنید.

اما راه شما:
فایل رو در FileStream لود کنید و با یک حلقه هر بار مقداری از اون رو به شکل زیر به دیتابیس بفرستید:
در SP مربوط به Insert می باید برای بار اول Insert کنید.
برای بارهای دیگر باید با نگهداشتن ردیفی که الان Insert شد (Identity@@) این بار اون ردیف رو Update کنید و داده جاری رو با داده قبلی "جمع" کنید.

این روش رو تست کردم و مشکلی نداشت.
دلفی 7 - اس کیو ال 2008 - وین 7

موفق باشید.

benyaminrahimi
سه شنبه 17 بهمن 1391, 09:33 صبح
میشه یه سمپل بدین ؟

یوسف زالی
سه شنبه 17 بهمن 1391, 18:49 عصر
این هم مثال (البته وسط کارم براتون نوشتم، توقع زیادی نداشته باشید)
متد های اصلاح و حذف بالقوه وجود دارند.
متد افزودن مثال شماست.
نظر دوستان هم (برای روش، نه UI) خالی از لطف نیست.

benyaminrahimi
شنبه 21 بهمن 1391, 11:32 صبح
مرصی زحمت کشیدین ولی من برای آپلود یه فایل 650 مگی تو مدل filestream تقریبا 15 دقیقه طول کشید این روش همینطوره ؟ یا کار من یه جایی گیر داره؟

یوسف زالی
شنبه 21 بهمن 1391, 16:21 عصر
همین طوره. این کار معمولا در این حجم همین حدود زمان می بره.
البته به روش من!



مرصی واقعا ...

از دکمه تشکر استفاده کنید :)

benyaminrahimi
یک شنبه 22 بهمن 1391, 10:09 صبح
ببین دوست من من از خود sql استفاده میکنم که تو این مثال مشابه تو حدود 45 ثانیه انجام میده خواستم اپتیمایزش کنم مثلن بشه 20 ثانیه مثل کپی پیست ویندوز.... نه 10 دقیقه ... در هر صورت کدو رو میذارم شاید بدرد کسی خورد



CREATE TABLE [dbo].[t](
[id] [int] IDENTITY(1,1) NOT NULL,
[a] [image] NULL,
[f] [varchar](200) NULL,
CONSTRAINT [PK_t] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
---------------

INSERT INTO t
(

f,
a
)
SELECT 'd:\1.avi',a.*
FROM OPENROWSET
(BULK 'd:\1.avi', SINGLE_BLOB) a

یوسف زالی
دوشنبه 23 بهمن 1391, 00:00 صبح
خب اون چه شما نوشتی Bulk Insert کلا داستانش فرق می کنه.
ممکنه فایل لوکال نباشه و از کلاینت ها فرستاده بشه.
هر کدوم جایگاه مخصوص به خودش رو داره.

benyaminrahimi
دوشنبه 23 بهمن 1391, 13:43 عصر
بله خوب با توجه به این موضوع .... و غیر قابل قبول بودن 15 دقیقه انتظار برای یه فایل 650 مگابایتی ...راه حل چیه ؟

یوسف زالی
دوشنبه 23 بهمن 1391, 15:33 عصر
شاید فرستادن اون فایل در فولدر Share و از اونجا Bulk کردن بهتر باشه.
اما کلا با ورود فایل به دیتابیس موافق نیستم..

benyaminrahimi
سه شنبه 24 بهمن 1391, 13:46 عصر
منم همین ظور ولی من با فایل اتریم کار میکنم

golbafan
یک شنبه 26 بهمن 1393, 10:22 صبح
تنظیمات پیشفرض sql سرور اجازه نمیده

The default maximum size is 128 MB for devices and 256 MB for desktops

khorsandreza
شنبه 23 اسفند 1393, 00:16 صبح
سلام
ورود من به این بحث کمی در پیش اساتید بی ادبی باشه باید عرض کنم بنده نیز در یک برنامه به کپی یک فایل (فیلم) 500 تا 1500 مگا خیلی روش ها را تست کردم و در اخر انتخاب اسکو سرور 2014 و استفاده از FileTable بود .
من فکر می کنم برای ارشیو فیلم و اپلود فایلهای حجیم باید از سرورهای اختصاصی استفاده کرد

Saeid59_m
جمعه 07 فروردین 1394, 19:30 عصر
برای همین مشکلاته که مباحثه NOT ONLY SQL داره مطرح میشه !
ولی خودم هم نمی دونم کاربردش به چه شکله ؟


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