PDA

View Full Version : سوال: استفاده از نوع داده long در شمارش دیتاتیبل



ji ming u
پنج شنبه 28 تیر 1397, 17:07 عصر
یک دیتا تیبل دارم سطرهای زیادی داره
که از یک شروع میشه تا چندین میلیارد
بعضی وقتا لازم این جدول اپدیت شه
هنگام اپدیت وقتی کد زیر را مینویسم
long total=dt_table.row[i]["mony"];
وقتی میخام به سطر iام دسترسی پیدا کنم چون i از نوع long م یباشد خطلا میگیره و میگه باید از نوع اینت باشه
این ئمشکلو چجوری برطرف کنم

sajedmalayeri
پنج شنبه 28 تیر 1397, 17:34 عصر
سلام ، خسته نباشی
از کد زیر استفاده کن :
long.TryParse(
dt_table.row[i]["mony"].ToString, out long total
);
متد TryPars یک نوع String میگیره و اگه بتونه اونو تبدیل میکنه به نوعی که میخوای .
بعد از اجرای این خط کد تو یک متغیر از نوع Long داری به اسم total و با مقدار درون

dt_table.row[i]["mony"];

بدرود

ji ming u
پنج شنبه 28 تیر 1397, 17:43 عصر
منظورم من اینکه در کدی ک نوشتی اگه i از نوع long باشه باید چیکا کنیم
با محتوای جدول داری ندارم با اون شمارشگر مشکل دارم

sajedmalayeri
پنج شنبه 28 تیر 1397, 17:50 عصر
منظورم من اینکه در کدی ک نوشتی اگه i از نوع long باشه باید چیکا کنیم
با محتوای جدول داری ندارم با اون شمارشگر مشکل دارم
خب شما i رو از کجا آوردی؟
من فکر میکنم یک حلقه for نوشتی درسته؟ چون گفتی شمارش گر
خب توی حلقه ی for به جای تعریف یک int ی دونه long تعریف کن مثال:
for(long l = 0;l==5;l++) {}

ji ming u
پنج شنبه 28 تیر 1397, 17:54 عصر
خب شما i رو از کجا آوردی؟
من فکر میکنم یک حلقه for نوشتی درسته؟ چون گفتی شمارش گر
خب توی حلقه ی for به جای تعریف یک int ی دونه long تعریف کن مثال:
for(long l = 0;l==5;l++) {}

dt_table.row[i]
در این کد row فقط مقدار int را قبول میکنه

mr.sirwan
پنج شنبه 28 تیر 1397, 17:54 عصر
میشه دلیل اینکه چند میلیارد رکورد رو یکجا لود میکنی و روش کار میکنی بگی؟ :متعجب::متعجب: یعنی واقعا این کار لازمه؟؟؟

sajedmalayeri
پنج شنبه 28 تیر 1397, 17:55 عصر
اگر هم از for استفاده نکردی میتونی این کارو کنی:
int.TryParse(i.ToString,out int newI);
و بعدش به جای i از newI استفاده کنی

sajedmalayeri
پنج شنبه 28 تیر 1397, 17:57 عصر
dt_table.row[i]
در این کد row فقط مقدار int را قبول میکنه
خب به جای long از int استفاده کن

ji ming u
پنج شنبه 28 تیر 1397, 17:58 عصر
خب به جای long از int استفاده کن

بیخیال داداش

mr.sirwan
پنج شنبه 28 تیر 1397, 18:25 عصر
هرچند کار شما اصولی نیست و مطمئنا سرعت پیمایشتون بشدت کند خواهد بود، ولی میتونین از Foreach استفاده کنین

sds1920
یک شنبه 31 تیر 1397, 08:10 صبح
دلیل مشکل شما این هست که در کلاس DataRowCollection برای دسترسی به سطرها از نوع int به عنوان ایندکس استفاده شده.شاید طراح این کلاس نظرش این بوده که int کفایت میکنه ولی شما یک مثال نقص شدی. در کل راه حل مستقیم برای مشکل شما وجود نداره. شاید به قول دوستمون foreach بتونه مشکل شما رو حل کنه ولی در این حالت دسترسی مستقیم به هر ردیف وجود نداره.به نظر من شما نیاز داری یک کلاس(به عنوان مثال BigTable) بنویسی که به جای یک تیبل از چند تیبل برای ذخیره اطلاعات استفاده کنه و در هر تیبل به اندازه int.MaxValue سطر نگهداری بشه. بعد هر ایندکسی که بهش داده میشه رو محاسبه کنه ردیف چندم از کدوم تیبل هست. نهایتا باید کلاسی باشه که بتونه این مورد رو مدیریت کنه و در عین حال به عنوان یک تیبل بزرگ هم دیده بشه.
باز هم در تایید حرف دوستان من هم میگم که نگهداری این حجم از دیتا در برنامه کار منطقی به نظر نمیاد. شاید دلیل محکمی برای اینکار دارید در غیر اینصورت بهتره در طراحی این قسمت برنامه یک بازنگری بکنید.
موفق باشید.