PDA

View Full Version : جابجای کردن اطلاعات ایک datatable به datatable دیگر



yekta64
چهارشنبه 16 تیر 1389, 14:00 عصر
سلام دوستان
من از یک جدول اطلاعات رو می خونم و در یک dataTable قرار می دم حالا می خوام از این datatable به صورت رندوم 10 تا رکرود رو بخونم و در یه datatable جدید قرار بدم چطور این کار رو انجام بدم؟؟؟
مرسی

alireza_s_84
چهارشنبه 16 تیر 1389, 15:04 عصر
سلام دوستان
من از یک جدول اطلاعات رو می خونم و در یک dataTable قرار می دم حالا می خوام از این datatable به صورت رندوم 10 تا رکرود رو بخونم و در یه datatable جدید قرار بدم چطور این کار رو انجام بدم؟؟؟
مرسی
سلام دوست عزیز:

Dim dtSource As DataTable = New DataTable()
Dim dtTarget As DataTable = New DataTable()

If (dtSource.Rows.Count > 0) Then
Dim Total As Integer = dtSource.Rows.Count - 1
For i = 0 To Total
Dim rnd As Random = New Random()

Dim SourceRow As DataRow = dtSource.Rows(rnd.Next(0, Total))
dtSource.Rows.Add(SourceRow.ItemArray)
Next
End If

موفق باشید

yekta64
چهارشنبه 16 تیر 1389, 15:11 عصر
سلام دوست عزیز:

Dim dtSource As DataTable = New DataTable()
Dim dtTarget As DataTable = New DataTable()

If (dtSource.Rows.Count > 0) Then
Dim Total As Integer = IIf(dtSource.Rows.Count > 9, 9, dtSource.Rows.Count)
For i = 0 To Total
Dim rnd As Random = New Random()

Dim SourceRow As DataRow = dtSource.Rows(rnd.Next(0, Total))
dtSource.Rows.Add(SourceRow.ItemArray)
Next
End If

موفق باشید


مرسی دوست عزیز
میشه ازت خواهش کنم یه مقدار در مورد این کد توضیح بدید؟؟؟
چون این 10 رکورد که من گفتم ثابت نیست ممکن تغییر کنه ممنون میشم در مورد این کد توضیح بدید؟

alireza_s_84
چهارشنبه 16 تیر 1389, 15:25 عصر
مرسی دوست عزیز
میشه ازت خواهش کنم یه مقدار در مورد این کد توضیح بدید؟؟؟
چون این 10 رکورد که من گفتم ثابت نیست ممکن تغییر کنه ممنون میشم در مورد این کد توضیح بدید؟
در خط 1 و 2 ابتدا دو تا دیتا تیبل تعریف شده یکی دیتاتیبل سورس و دیگری دیتاتیبل مقصد.
در خط 4 چک میکنیم که تنها زمانی عملیات کپی کردن سطرها انجام بشه که دیتاتیبل ما دارای سطری باشه (کد برای جلوگیری از بروز خطا)
در خط 5 یک متغیر تعریف میکنیم که تعداد سطرهای دیتاتیبل منبع رو با کسر یک سطر برای ما نگهداره
در خط 6 با یک حلقه که 10 بار تکرار میشه در خط 7 و 9 یک عدد راندوم بین 0 تا متغیر Total (که مقدار اون یکی کمتر از تعداد سطرهای دیتاتیبل منبع ماست) شماره یک سطر رو استخراج میکنیم و در خط 10 به دیتاتیبل هدف مقادیر سطر استخراج شده از دیتاتیبل منبع رو اضافه میکنیم.
نکته: خط 5 ویرایش شد.

yekta64
چهارشنبه 16 تیر 1389, 15:31 عصر
دوست عزیز
من به عنوان نمونه خواستم یه ردیف از دیتاتیبل رو به دیتاتیبل دیگه منتقل کنم و از کد زیر استفاده کردم:


Dim dt As New DataTable
Dim dt1 As New DataTable
dt = FillFromTblSentence(8)
Dim dr As DataRow = dt.Rows(0)
dt1.Rows.Add(dr.ItemArray)


که خوب روی خط زیر :


dt1.Rows.Add(dr.ItemArray)


این ارور رو می گیره:
Input array is longer than the number of columns in this table.

به نظر شما علت چی هستش؟؟؟
مرسی

yekta64
چهارشنبه 16 تیر 1389, 15:40 عصر
یه سوال دیگه البته مشکل که در پست بالا کفتم حل نشده
منتها یه سوال برای من مطرح هستش اینکه شما می گید حلقه 10 بار تکرار میشه در صورت در حلقه مقدار total تیعنی تعداد سطرهای منهای یک رو قرار دادید چرا؟؟؟
بر فرض من 100 سطر در دیتاتیبل 1 دارم حالا می خوام از این 100 سطر به صورت رندوم 10 تا انتخاب بشه و در دیتاتیبل 2 قرار بگیره

مرسی

alireza_s_84
چهارشنبه 16 تیر 1389, 16:35 عصر
این ارور رو می گیره:
Input array is longer than the number of columns in this table.
به نظر شما علت چی هستش؟؟؟
مرسی
ساختار هر دو دیتاتیبل شما باید یکسان باشه یعنی اگر دیتاتیبل اول شامل سه سه ستون Id,Name,date باشه دیتاتیبل دوم نیز باید شامل این سه ستون باشه.
پس بعد از تعریف دیتاتیبل دوم ساختار اون رو هم تعریف کنید.

یه سوال دیگه البته مشکل که در پست بالا کفتم حل نشده
منتها یه سوال برای من مطرح هستش اینکه شما می گید حلقه 10 بار تکرار میشه در صورت در حلقه مقدار total تیعنی تعداد سطرهای منهای یک رو قرار دادید چرا؟؟؟
بر فرض من 100 سطر در دیتاتیبل 1 دارم حالا می خوام از این 100 سطر به صورت رندوم 10 تا انتخاب بشه و در دیتاتیبل 2 قرار بگیره

خب برای اینکه متد Next کلاس random دو پارامتر میگیره یکی حداقل مقدار عدد تصادفی و دومی حداکثر مقدار عدد تصادفی لذا حداقل آن میشه سطر با ایندکس 0 و حداکثر آن میشه سطر با ایندکس (تعداد سطرهای دیتاتیبل - 1) چون ایندکس سطر آخر یکی از تعداد سطرها کمتر است. و اینکار انتخاب ایندکس سطر تصادفی در حلقه 10 مرتبه انجام میگیره.
__________________________________________________ ______________________________
نکته: برای اینکه یک سطر دوبار به دیتاتیبل دوم اضافه نشه میتونید از یک ArrayList برای نگهداری ایندکس سطرهای اضافه شده در درون حلقه استفاده کنید و ابتدا چک کنید که آیا ایندکس کنونی در این متیغر وجود داره یا نه اگر وجود داشت مقدار i رو یکی کم کنید و از اضافه کردن سطر خودداری کنید. به این ترتیب دیگه سطر تکراری که احتمال اون زیاده به دیتاتیبل دوم اضافه نمیشه.

yekta64
چهارشنبه 16 تیر 1389, 21:23 عصر
ساختار هر دو دیتاتیبل شما باید یکسان باشه یعنی اگر دیتاتیبل اول شامل سه سه ستون Id,Name,date باشه دیتاتیبل دوم نیز باید شامل این سه ستون باشه.
پس بعد از تعریف دیتاتیبل دوم ساختار اون رو هم تعریف کنید.

خب برای اینکه متد Next کلاس random دو پارامتر میگیره یکی حداقل مقدار عدد تصادفی و دومی حداکثر مقدار عدد تصادفی لذا حداقل آن میشه سطر با ایندکس 0 و حداکثر آن میشه سطر با ایندکس (تعداد سطرهای دیتاتیبل - 1) چون ایندکس سطر آخر یکی از تعداد سطرها کمتر است. و اینکار انتخاب ایندکس سطر تصادفی در حلقه 10 مرتبه انجام میگیره.
__________________________________________________ ______________________________
نکته: برای اینکه یک سطر دوبار به دیتاتیبل دوم اضافه نشه میتونید از یک ArrayList برای نگهداری ایندکس سطرهای اضافه شده در درون حلقه استفاده کنید و ابتدا چک کنید که آیا ایندکس کنونی در این متیغر وجود داره یا نه اگر وجود داشت مقدار i رو یکی کم کنید و از اضافه کردن سطر خودداری کنید. به این ترتیب دیگه سطر تکراری که احتمال اون زیاده به دیتاتیبل دوم اضافه نمیشه.


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

yekta64
چهارشنبه 16 تیر 1389, 21:29 عصر
ببینید دوست عزیز بر فرض تعداد ستون های دیتاتیبل من بیش از 100 باشد این منطقی نیست که من بیایم این 100 ستون رو برای دیتاتیبل 2 هم تعریف کنم
درست می گم؟؟؟؟

alireza_s_84
چهارشنبه 16 تیر 1389, 22:10 عصر
سلام
مرسی دوست عزیز
میشه لطف کنید نحوه ی تعریف ساختار دیتاتیبل رو چطور باید تعریف کنم؟؟؟
و اینکه در مرود نکته ی که گفتید یه مثال هم بزنید؟؟
بی نهایت ممنون و سپاسگذارم دوست عزیز
ساختار یک DataTable با استفاده از DataColumn و اضافه کردن آنها به کلکسیون ستونهای شی DataTable تعریف میشه که با وجود designer نیازی به اینکار نیست ولی در هر حال بدون designer هم میتونید بعد از پر کردن یک دیتاتیبل ساختار اون رو توی یک دیتاتیبل دیگه کپی کنید . وقتی یک دیتاتیبل با استفاده از شی Adapter پر میشه ساختار اون هم تعریف میشه و نیازی به تعریف ساختار نداریم.
من یک نمونه مثال ضمیمه میکنم که دقیقا مقصود شما رو برآورده میکنه و اون نکته هم ذکر کرده بودم رو بهش اضافه کردم.

ببینید دوست عزیز بر فرض تعداد ستون های دیتاتیبل من بیش از 100 باشد این منطقی نیست که من بیایم این 100 ستون رو برای دیتاتیبل 2 هم تعریف کنم
درست می گم؟؟؟؟
بله شما درست میگید ولی من هرچی پست های قبلی خودم رو نگاه میکنم نمیبینم که گفته باشم شما دستی ساختار دیتاتیبل رو تعریف کنید!!! فقط گفت ساختار دو دیتاتیبل باید مثل هم باشه.
فایل ضمیمه رو بررسی کنید باز هم مشکلی بود در خدمت هستم
موفق باشید

yekta64
پنج شنبه 17 تیر 1389, 08:37 صبح
ممنون دوست عزیز
ممنون میشم یه اجازه بدید من نمونه کدی رو که اطف کردید قرار دادید ببینم و در صورت نیاز مزاحم بشم

بله شما درست می گین برداشت من اشتباه بود .
مرسی

غلامرضا شریفی
یک شنبه 20 تیر 1389, 10:48 صبح
اين هم يك روش براي تبادل اطلاعات بين دو جدول

INSERT INTO server1.db1.sch1.tbl1
SELECT * FROM server2.db2.sch2.tbl2

ضمنا بايد لينك زير مفيد باشد
http://www.barnamenevis.org/forum/showthread.php?t=163719