PDA

View Full Version : انتقال اطلاعات سلول های بیشتر از 255 کاراکتر از فایل اکسل به دیتابیس



mehdi0020
دوشنبه 25 بهمن 1395, 08:24 صبح
سلام روز بخیر
دوستان تو برنامه من اکثر اطلاعات از فایل اکسل به دیتابیس انتقال داده میشه مشکلی که الان دارم اینه که ممکنه بعضی از سلول هام بیش از 255 کاراکتر داشته باشه
من تو قسمتی که با استفاده از حلقه سلول ها رو میخونم و تو دیتابیسم مینویسم چون string بیشتر از 255 نمیگیره از StringBuilder استفاده کردم
وقتی فقط رکودی که دارای سلول طولانی هستش اینپورت میکنم مشکلی نداره اما وقتی فایل کامل اینپرت میکنم سر رکورد با کاراکتر طولانی به مشکل میخوره
codesfc.Append(row.Cells[29].Value);
با استفاده از این تکه کد سلول ها رو از فایل اکسل میریزم تو متغیر از نوع StringBuilder
ممنون از راهنماییتون

محمد آشتیانی
دوشنبه 25 بهمن 1395, 10:18 صبح
سلام
مشکل شما احتمالا جای دیگری هست ، طول دیتاتایپ string ، چیزی شما فرمودید نیست
https://msdn.microsoft.com/en-us/library/hhw1f6w5(v=vs.100).aspx

شاید طول فیلد شما در دیتابیس 255 ست شده

mehdi0020
دوشنبه 25 بهمن 1395, 11:57 صبح
طئل فیلدی که استفاده میکنم 50 هستش یعنی استرینگی که از اکسل میخونم رو به تکه های 10 تایی جدا میکنم و برای هر تکه یک رکورد جدید تو دیتابیس می نویسم
وقتی فایل اکسل با تک رکورد که طولش طولانی باشه اینپرت میکنم مشکلی نداره و درست کار میکنه اما وقتی فایل کلی اینپرت میکنم زمانی که سلول را داحل متغیرم میریزه Lengh=255 هستش

محمد آشتیانی
دوشنبه 25 بهمن 1395, 13:36 عصر
سلام
کدتون و یا یک پروژه تستی که توی اون خطا اتفاق میفته رو به همراه نمونه فایل اکسل و دیتابیس (کلا هرچی که نیاز هست برای اجرا) اینجا بگذارید تا بررسی مشکل آسون تر باشه.



موفق باشید.

mehdi0020
دوشنبه 25 بهمن 1395, 14:53 عصر
سلام
کدتون و یا یک پروژه تستی که توی اون خطا اتفاق میفته رو به همراه نمونه فایل اکسل و دیتابیس (کلا هرچی که نیاز هست برای اجرا) اینجا بگذارید تا بررسی مشکل آسون تر باشه.



موفق باشید.

نمیدونم تصویر میتونه کمک کنه یا کد برنامه لازمه چون حجم برنامه زیاد بود گفتم شاید با تصویر بتونید متوجه شید فعکس از فایل اکسل گذاشتم فیلدی که باهاش مشکل دارم
رکوردی که سبر رنگ هستش اگه به این صورت وارد شه با توجه به اینکه حدود 380 کاراکتر هستش همینطور که تو تصویر برنامه میبینید 255 کاراکترشو میبینه ولی اگه تک رکورد وارد کنم درست عمل میکنه
144460
144461

mehdi0020
دوشنبه 25 بهمن 1395, 15:09 عصر
سلام
مشکل شما احتمالا جای دیگری هست ، طول دیتاتایپ string ، چیزی شما فرمودید نیست
https://msdn.microsoft.com/en-us/library/hhw1f6w5(v=vs.100).aspx

شاید طول فیلد شما در دیتابیس 255 ست شده

اگه این تصاویر نمیتونه کمکی بکنه بگید تا ی تکه کد تستی بنویسم و براتون ارسال کنم

محمد آشتیانی
سه شنبه 26 بهمن 1395, 08:57 صبح
سلام
زحمت بکشید ، یک کد تستی ارسال کنید

mehdi0020
سه شنبه 26 بهمن 1395, 13:26 عصر
سلام
زحمت بکشید ، یک کد تستی ارسال کنید

سلام ممنون از راهنمایی
http://s8.picofile.com/file/8286345118/test.rar.html

محمد آشتیانی
چهارشنبه 27 بهمن 1395, 15:54 عصر
سلام
این مسئله ارتباطی به نوع داده سمت سی شارپ نداره ، موضوع از این قراره که oledb برای تشخیص نوع دیتای ستون های فایل اکسل ، 8 ردیف اول رو بررسی میکنه و بر اون اساس تصمیم میگیره ، وقتی نوع فیلد رو متنی (character) تشخیص میده ، به صورت اتوماتیک طول اون رو 255 در نظر میگیره
برای حل این مشکل باید مقادیری رو در رجیستری تغییر بدید تا oledb فیلدهای متنی رو از نوع memo در نظر بگیره و محدودیت طول برداشته بشه
این لینک رو مطالعه کنید https://support.microsoft.com/en-us/help/281517/prb-transfer-of-data-from-jet-4.0ledb-source-fails-with-buffer-overflow-error

بر اساس همون لینکی که دادم ، راه حل ساده دیگه اینه که در یکی از هشت ردیف اول فایل اکسل و ستون مورد نظرتون یه محتوا با طول بیش از 255 کاراکتر وارد کنید تا oledb اون ستون رو به صورت اتوماتیک از نوع memo در نظر بگیره.

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



موفق باشید.

mehdi0020
دوشنبه 02 اسفند 1395, 06:30 صبح
سلام
این مسئله ارتباطی به نوع داده سمت سی شارپ نداره ، موضوع از این قراره که oledb برای تشخیص نوع دیتای ستون های فایل اکسل ، 8 ردیف اول رو بررسی میکنه و بر اون اساس تصمیم میگیره ، وقتی نوع فیلد رو متنی (character) تشخیص میده ، به صورت اتوماتیک طول اون رو 255 در نظر میگیره
برای حل این مشکل باید مقادیری رو در رجیستری تغییر بدید تا oledb فیلدهای متنی رو از نوع memo در نظر بگیره و محدودیت طول برداشته بشه
این لینک رو مطالعه کنید https://support.microsoft.com/en-us/help/281517/prb-transfer-of-data-from-jet-4.0ledb-source-fails-with-buffer-overflow-error

بر اساس همون لینکی که دادم ، راه حل ساده دیگه اینه که در یکی از هشت ردیف اول فایل اکسل و ستون مورد نظرتون یه محتوا با طول بیش از 255 کاراکتر وارد کنید تا oledb اون ستون رو به صورت اتوماتیک از نوع memo در نظر بگیره.

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



موفق باشید.

سلام تشخیص شما کاملا درست بود من با استفاده از لینکی که برام فرستادید پیش رفتم اما زمانیکه مقدار TypeGuessRows به Decimal تغییر میدم و دوباره باز میکنم مقدارش بر میگرده به قبل درواقع تغییر نمیکنه و همچنان مشکل قبل دارم.