PDA

View Full Version : یافتن چندین رکورد با دستور read



pedram_ns
چهارشنبه 25 اسفند 1389, 08:53 صبح
با سلام
من در دیتابیسم جدولی برای اطلاعات عمومی دارم که هر رکورد یک فیلد به نام directorid داره که یک شماره دایرکتوری هست تا اطلاعات این بخش بصورت دایرکتوری(درختی) هم در دسترس باشه.

می خوام بعد از جستجوی یک عبارت توسط کاربر و بعد از یافتن اطلاعات مورد نظر از این جدول شماره directorid رکورد های یافت شده رو هم بخونم و با این شماره ها دوباره یک کوری بنویسم تا سرشاخه های اصلی رو هم به کاربر نشون بدم چطور باید عمل کنم:

1.بعد از جستجو با کد زیر همه شماره دایرکتوری ها بدست میاد:


While reader.Read()
Dim director As String = reader("directorid").ToString()
End While

و بعد با کوری زیر می خوا بر اساس این شماره ها جستجو کنم ولی فقط آخرین رکورد رو بر می گردونه:


While reader.Read()
Dim director As String = reader("directorid").ToString()

Dim selectsql1 As String = "SELECT [ID], [title], [link], [directorid] FROM [information] WHERE ([linkid] = ?)"

Dim cmd1 As New OleDbCommand(selectsql1, con)
cmd1.Parameters.AddWithValue("linkid", director)

Dim adapter1 As New OleDbDataAdapter(cmd1)
Dim ds1 As New DataSet()

adapter1.Fill(ds1, "information")

DataList2.DataSource = ds1
DataList2.DataBind()
End While

pedram_ns
چهارشنبه 25 اسفند 1389, 14:27 عصر
کمکی نیست؟

amirjalili
چهارشنبه 25 اسفند 1389, 15:09 عصر
ببین خوب باید هم آخرین رکورد رو بده چون دائما تو داری اشیاء رو new میکنی.


While reader.Read()
Dim director As String = reader("directorid").ToString()

Dim selectsql1 As String = "SELECT [ID], [title], [link], [directorid] FROM [information] WHERE ([linkid] = ?)"

Dim cmd1 As New OleDbCommand(selectsql1, con)
cmd1.Parameters.AddWithValue("linkid", director)

Dim adapter1 As New OleDbDataAdapter(cmd1)
Dim ds1 As New DataSet()


خوب آخرین نتیجه تو مربوط به آخرین instance گرفته شده هست.
تو اگه بخوای با datareader کار کنی و بعد رو گرید نشون بدی با datareader اطلاعاتت رو بخون و بایند کن به گرید.

dr=com.ExecuteReader();
6. Datagrid1.DataSource=dr;
7. DataGrid1.DataBind();

اگه هم که میخوای حتما با DataSet کار کنی یه پروسیجر بنویس که کل کارهایی که میخوای رو انجام بده و بعد نتیجه رو بریز تو DataSet و تمام.

pedram_ns
چهارشنبه 25 اسفند 1389, 15:44 عصر
نمی دونم من متوجه منظور شما نشدم یا شما متوجه منظور من!
ببینید وقتی کاربر در این صفحه یک کلمه رو سرچ می کنه من بر اساس اون کلمه، یکسری اطلاعات رو روی datalist به کاربر نشون می دم یکی از فیلد هایی که با این کوری بدست میاد اسمش هست directorid که من این مقدار رو با datareader می خونم.
حالا می خوام بر اساس این اعداد جدید بدست اومده دوباره یک کوری بنویسم و یک سری اطلاعات جدید بدست بیارم و در یک datalist دیگه نشون بدم

به عبارتی بر اساس سرچ کاربر یکسری اطلاعات بدست میاد و بر اساس شماره دایرکتوری اون اطلاعات بدست اومده، سرشاخه هاشون رو هم نشون می دم یعنی اگر کاربر کلمه "بیمارستان" رو سرچ کرد چند بیمارستان پیدا می شه و نمایش داده می شه و در زیر اونها سرشاخه اصلی به نام "بیمارستان های دولتی" هم پیدا می شه.

با این کد من بعد از کوری اول مقدار directorid رو بدست میارم:


Dim director As String = reader("directorid").ToString()

و بعد بر اساس شماره بدست اومده یک کوری جدید می نویسم تا سرشاخه رو هم پیدا کنم:



Dim selectsql1 As String = "SELECT [ID], [title], [link], [directorid] FROM [information] WHERE ([linkid] = ?)"

Dim cmd1 As New OleDbCommand(selectsql1, con)
cmd1.Parameters.AddWithValue("linkid", director)

Dim adapter1 As New OleDbDataAdapter(cmd1)
Dim ds1 As New DataSet()


فقط اطلاعات مربوط به عدد اول رو پیدا می کنه. چطور باید بنویسم تا با تک تک اعداد بدست آمده در directorid این کوری انجام بشه و مثلا اگر 3 عدد هست سه رکورد هم خونده بشه.

pedram_ns
پنج شنبه 26 اسفند 1389, 08:46 صبح
کسی نظری نداره؟؟؟؟؟؟؟؟

pedram_ns
پنج شنبه 26 اسفند 1389, 09:29 صبح
من کدم رو به این صورت تغییر دادم و اطلاعات بدست اموده رو بصورت یک آرایه می نویسم حالا می خوام با ایجاد یک حلقه یک کوری بنویسم تا بر اساس هر عدد اطلاعات رو بدست بیاره:


reader = cmd.ExecuteReader()


Dim aList As New ArrayList

While (reader.Read())
aList.Add(reader("directorid"))
End While

reader.Close()

Dim director As String = ""
For Each item As Integer In alist
director += item.tostring + " or linkid = "
Next
director = director.Substring(0, director.Length - 10)

Dim selectsql1 As String = String.Format("SELECT [ID], [title], [link], [directorid] FROM [information] WHERE linkid = {0}", director)

hاین روش کار می کنه ولی آیا این روش من درسته؟