PDA

View Full Version : انتخاب چند رکورد به صورت random ?



majid325
چهارشنبه 03 آبان 1385, 10:48 صبح
سلام دوستان :

دوستان من در حال ساختن یک برنامه تحت ویندوز با c# هستم , تو این برنامه قرار است یک سری امتحان به صورت تستسی گرفته بشه . حالا من تو یه قسمت از این برنامه که قرار تست به صورت Random از دانش آموز گرفته بشه به این مشکل برخوردم که چطور باید من یک سری رکورد به صورت Random از بانک انتخاب کنم..کمکی که شما به من میتونید بکنید این است که روش انتخاب رکورد به صورت random از بانک را که رکورد تکراری هم نباشه به من با یک نمونه کد کوچک توضیح بدین .

با تشکر

once4ever
چهارشنبه 03 آبان 1385, 11:58 صبح
شما با استفاده از کلاس Random مثلا 10تا شماره رندوم بدست میاری و داخل آرایه میذاری به شکلی که هربار چک کنی این شماره درآرایه نباشه ودرضمن شماره ها از تعداد رکوردهات بیشتر نباشه
وبعد میری اون رکوردهارو سلکت میکنی

ARA
چهارشنبه 03 آبان 1385, 14:01 عصر
به نظر من قسمت cursor ها رو توی sql sever نگاه کن بدردت میخوره
همینطوری که دوستمون once4ever (http://barnamenevis.org/forum/member.php?u=8564) گفتند عمل کن و برای select کردن از procedure استفاده کن که یک عدد بگیره و به کمک cursor اون رو برات fetch کنه

majid325
پنج شنبه 04 آبان 1385, 01:59 صبح
به نظر من قسمت cursor ها رو توی sql sever نگاه کن بدردت میخوره
به کمک cursor اون رو برات fetch کنه
دوست عزیز میشه یه کم در مورد این مطلب ک گفتی توضیح بدی ....اگر منابع فارسی هم در این مورد معرفی کنی چه بهتر؟

alireza6282
پنج شنبه 04 آبان 1385, 10:06 صبح
یه دستور sql هست که این کارو انجام میده .یه جستجوی کوچولو در گوگل همه چیزو بخوبی بهت نشون میده .

majid325
جمعه 05 آبان 1385, 16:08 عصر
سلام :
یک مسئله در مورد مطالبی که عرض کردم پیش آمده که اگر حل بشه کارم جلو میره........
چطوری میشه مقدار برگشتی select زیر را در یک متغییر ذخیره کرد؟

da1.SelectCommand=new SqlCommand();
da1.SelectCommand.CommandType=CommandType.Text;
da1.SelectCommand.Connection=cnn1;
"da1.SelectCommand.CommandText ="SELECT MAX(id) From Tb_Master
da1.Fill(ds1, "Tb_Master");

ARA
جمعه 05 آبان 1385, 23:28 عصر
مگه الان تو dataset ذخیره نکردی ؟
استفاده کن دیگه

majid325
شنبه 06 آبان 1385, 00:26 صبح
مگه الان تو dataset ذخیره نکردی ؟
استفاده کن دیگه
میشه یکی بگه چه جوری از dataset بگیرمش بریزم تو یه متغییر؟

Y2K
شنبه 06 آبان 1385, 00:46 صبح
این دستور انتخاب رندوم چند رکورد از بانک اطلاعاتی در دیتابیسهای مختلف
SQL to Select a random row from a database table (http://www.petefreitag.com/item/466.cfm)

که تو SQL Server بدین صورته


SELECT TOP X column FROM table ORDER BY NEWID()

x=یک عدد

اینم گرفتن یه ستون از دیتاست


DataRow dr=new DataRow();
dr=Dataset.Tables["TableName"].Rows(0);
string s;
s=dr["ColumnName"].ToString();

ARA
شنبه 06 آبان 1385, 06:08 صبح
الان توی ds1 حداقل یک رکورد داری


ds1.Tables["Tb_Master"].Rows[0][1];


دسترسی به فیلد اول رکورد اول :لبخند:

majid325
شنبه 06 آبان 1385, 09:03 صبح
این دستور انتخاب رندوم چند رکورد از بانک اطلاعاتی در دیتابیسهای مختلف
SQL to Select a random row from a database table (http://www.petefreitag.com/item/466.cfm)

که تو SQL Server بدین صورته


SELECT TOP X column FROM table ORDER BY NEWID()

x=یک عدد

اینم گرفتن یه ستون از دیتاست


DataRow dr=new DataRow();
dr=Dataset.Tables["TableName"].Rows(0);
string s;
s=dr["ColumnName"].ToString();


دوست عزیز من یه خورده دیر متوجه میشم !!!!!!!
البته تست هم کردم با کد زیر ولی همش یک عدد تکراری میده!

da1.SelectCommand.CommandText = "SELECT TOP 10 id FROM Tb_Master ORDER BY ID "

da1.Fill(ds1, "Tb_Master");

DataRow dr1;
dr1 = ds1.Tables["Tb_Master"].Rows[0];
string s;
s = dr1["id"].ToString();
میشه بگین مشکل کجاست؟
در ضمن x در کوئری شما چی کار میکنه ! مقدارشو تغییر دادم ولی تغییری ایجاد نشد؟
newid چی کار میکنه؟
با تشکر

ARA
شنبه 06 آبان 1385, 10:49 صبح
error میده یا کاری نمیکنه

Y2K
شنبه 06 آبان 1385, 15:24 عصر
خوب تو دستور Sql باید NewID() رو به همون صورت بنویسی
تنها چیزایی که می تونه عوض بشه تو اون دستور
1: نام جدول
2: TOP X که می تونی اسم فیلدات رو هم بذاری

اگه چندین رکورد میخوای بکشی بیرون باید یه حلقه هم اضافه کنی



foreach(DaraRow dr in DataSet.Tables["TableName"].Rows)
{

آرایه = dr["ColumnName"].ToString()
}

majid325
یک شنبه 07 آبان 1385, 16:14 عصر
سلام:
آیا این کوئری "SELECT TOP 10 id FROM Tb_Master ORDER BY ID یک رکورد به صورت Random انتخاب میکنه؟؟؟؟؟؟
اگر جواب مثبت است !!! پس چرا هر چقدر من سعی میکنم فقط اولین رکورد را انتخاب میکند؟

Y2K
یک شنبه 07 آبان 1385, 18:19 عصر
کوئری درست به صورت زیر میباشد


SELECT TOP 10 id FROM Tb_Master ORDER BY NEWID()

دقت کنید باید در آخر دستور NEWID() بنویسید نه ID
این دستور 10 رکورد تصادفی را از جدول مورد نظر انتخاب می کند


در جواب سوال دوم شما:
زیرا در دستور


dr1 = ds1.Tables["Tb_Master"].Rows[0];

شماره نوشته شده در روبروی ROWS، شماره ردیف موجود در دیتاست را نشان می دهد
و شما همیشه اولین رکورد را انتخاب میکردید

majid325
یک شنبه 07 آبان 1385, 20:29 عصر
دوست عزیز خیلی ممنون از توجهتون....
امتحان میکنم جوابشو بهتون میگم.

majid325
یک شنبه 07 آبان 1385, 21:13 عصر
دستت خیلی خیلی درد نکنه....مشکلم حل شد.

majid325
چهارشنبه 17 آبان 1385, 14:10 عصر
با سلام یه مشکل کوچیک در مورد مطالب قبل برام درست شده!
دستور کوئری زیر را که اجرا میکنم erorr میگیره؟
خودم فکر میکنم یا ترتیب پرانتزها را رعایت نکردم یا بعضی کلمات کلیدی sql را نمیشه با هم به کار برد؟

SELECT DISTINCT TOP (@count)(Numid) FROM Tb_Master ORDER BY NEWID() WHERE Section IN @section

majid325
چهارشنبه 17 آبان 1385, 23:13 عصر
من منتظرم !!!!!!!!!!!!!!!!1111

ARA
پنج شنبه 18 آبان 1385, 01:32 صبح
http://barnamenevis.org/forum/showthread.php?t=53056&highlight=SQL

این رو نگاه کن شاید بدردت بخوره

majid325
پنج شنبه 18 آبان 1385, 13:45 عصر
تشکر جناب ARA.

من آی کیوم خیلی پایینه!!!!!!!!!

با لینک شما هم نتونستم مشکلم را حل کنم !

لطفا یکی راهنمایی کنه کل کارم لنگ این کوئری!!!!!!!!!!

majid325
سه شنبه 23 آبان 1385, 00:20 صبح
کسی نمیتونه کمکم کنه؟

rezaei manesh
سه شنبه 23 آبان 1385, 09:11 صبح
این رو یه تستی بکن


Section IN (@section)

majid325
سه شنبه 23 آبان 1385, 19:07 عصر
من برای اینکه تست کنم قسمت Distinct را از کوئری حذف کردم و بعد اجرا کردم, مشکلی نداشت .
ولی وقتی Distinct را میزارم Eroor میگیره!!!!!!!!