PDA

View Full Version : چند تا سوال ساده(datareader(و....



jannati
چهارشنبه 04 شهریور 1383, 14:32 عصر
دوستان سلام
اگر ممکنه این چندتا سوال منو پاسخ بدید:
1-چگونه میتوان تعداد رکوردهای بازگشتی از یک queryرا پیدا کرد.اگر با datasetکار کنیم؟اگر با datareaderکار کنیم؟

2-تابع GetInt32()چه کاری انجام میدهد؟
3-من با یک datareaderاطلاعاتم را از tableمیخوانم.اما میخوام یکی از فیلدهامو با یک مقدار مقایسه کنم .چطوری میتونم از طریق datareaderبه مقدار فیلدم دسترسی داشته باشم.اگر ممکنه در datasetهم روش را بگید.(میخوام بدونم دقیقا کدش چیه؟)
خیلی ممنون

Farhad.B.S
چهارشنبه 04 شهریور 1383, 15:41 عصر
1.در دیتاست :

YourDataset.Tables["TableName"].Rows.Count;
در دیتاریدر تابع یا پراپرتی برای این کار نداریم ، میتونید با دستورات SQL تعداد دستورات رو محاسبه کنید و به عنوان یه فیلد برگردونید.
2.مقدار فیلد مورد نظر در دیتاریدر رو در قالب عددی از نوع Int32 برمیگردونه.
3.در دیتاریدر امکان بازگشت به عقب وجود نداره ، اما در دیتاست به طریق زیر عمل کنید :

YourDataset.Tables[TableIndex].Rows[RowIndex][Colu mnIndex]

نکته مهمی که باید به خاطر داشت اینه که دیتاریدر یه کلاس برای استفاده از داده ها به صورت آنلاین هست و دیتاست یه محفظه برای نگهداری داده ها و بازیابی اونها به صورت آفلاین.

mohsen99
چهارشنبه 04 شهریور 1383, 16:02 عصر
اما میخوام یکی از فیلدهامو با یک مقدار مقایسه کنم .چطوری میتونم از طریق datareaderبه مقدار فیلدم دسترسی داشته باشم


reader.GetType(index)

که reder اسم datareader شما است و Type بستگی به نوع داده داخل Db داره مثلا اگر رشته باشه :GetString
و index شماره آن فیلد خاص در دستور select است مثلا :

select id, name from tbl1 where ...
برای دستیابی به فیلد name:
reder.GetString(1)
در ضمن قبل از این دستورات حتما باید یک دستور

reader.Read()
وجود داشته باشه

jannati
دوشنبه 16 شهریور 1383, 08:55 صبح
دوست عزیز راستش من هرچی از این دستور getاستفاده میکنم جواب نمیده.مثل کد زیر:


mm1.Read ();
m2=mm1.GetInt32 (2);
Response.Write("this is "+m2);
mm1.Close ();


مقداری برای m2برنمیگرداند

Vahid_Nasiri
دوشنبه 16 شهریور 1383, 18:10 عصر
مثالی در مورد دیتاست:


SqlConnection conn = new SqlConnection(connectionString);
SqlDataAdapter a = new SqlDataAdapter
("select * from mytable;",conn);
DataSet s = new DataSet();
a.Fill(s);
foreach (DataRow dr in s.Tables[0].Rows)
{
Response.Write(dr[0].ToString());
}

مثالی در مورد دیتاریدر:


SqlConnection conn = new SqlConnection(connectionString);
SqlCommand comm = new SqlCommand("select * from mytable", conn);
comm.Connection.Open();
SqlDataReader r =
comm.ExecuteReader(CommandBehavior.CloseConnection );
while(r.Read())
{
Response.Write(r.GetString(0));
}
r.Close();
conn.Close();

حالا کد خودتون رو مقایسه کنید با اینها.

SoheilKH
سه شنبه 17 شهریور 1383, 01:28 صبح
در دیتاریدر تابع یا پراپرتی برای این کار نداریم
در بعضی حالات خاص از پراپرتی RecordsAffected ، می تونی برای گرفتن تعداد رکورد استفاده کنی

jannati
یک شنبه 22 شهریور 1383, 15:31 عصر
جناب مهندس نصیری ممنون از جوابتون
اما من دوتا dropdownدارم که میخوام یکی براساس یکی دیگه پر بشه.حالا به جای این کدی که شما نوشتی من یک متغییر گذاشتم تا با توجه به کد هر آیتمی که در اولی انتخاب میشه dropdownدومی را پرکنم.اما متغیرم رو با اینکه در ابتدای تابع تعریف کردم وقتی از حلقه whileخارج میشم دیگه نمیشناسه.داخل خود حلقه هم مقداری برنمیگردونه.(میدونم که بارها این مساله را توضیح دادید.شرمنده :oops: )
باید چیکار کنم که خارج از حلقه متغییر رو بشناسه؟

Vahid_Nasiri
یک شنبه 22 شهریور 1383, 18:35 عصر
صفحات وب همانطور که در مقاله ای پیشتر ذکر شد، stateless هستند (برخلاف برنامه های نرمال ویندوز). یعنی وقتی پردازش صفحه تمام شد تمام متغیرهای شما از طرف سرور نابود می شوند مگر اینکه مقاله حفظ حالت را دقیق بخوانید.
+ تا کد شما رو نبینم نظری ندارم.