PDA

View Full Version : 2بار استفاده همزمان از sqldatareader



khazon
شنبه 20 بهمن 1386, 02:04 صبح
سلام
مدت کمیه دارم با بانک sql server کار میکنم... قبلا با اکسس کارامو پیش میبردم و مشکلی نداشتم..
الآن وقتی میخوام رکوردهایی که با دستور select استخراج کردم رو استفاده کنم از:

Dim CmdFriend As New SqlCommand(Cls.Sql, Conn)
dim reader as SqlDataReader=CmdFriend.ExecuteReader

استفاده میکنم...
ولی وقتی همزمان میخوام مقدار دیگری رو با یک دستور sql استخراج کنم:

Dim Cmd as new SqlCommand(cls.sql2,conn)

و همچنین از :

Dim reader2 as sqlDataReader = Cmd.ExecuteReader

استفاده کنم برا خووندن، پیغام میده که اول باید reader رو ببندم و بعد از reader2 استفاده کنم...
اگه هم بخوام به اینصورت تعریف کنم:

dim reader2 as new ....

بازم قبول نمیکنه...و میگه constraction (اگه درست نوشته باشم) نداره....
خواهشن راهنمایی کنید

shahab2025
یک شنبه 21 بهمن 1386, 00:56 صبح
دوست من
به منم میگفت باید reader را ببندی ...

من connection را بستم و در خط بعدی باز کردم درست شد...
تو هم امتحان کن

ghafoori
یک شنبه 21 بهمن 1386, 09:18 صبح
دوست عزیز شما برای 2 تا sqldatareader نمی توانید همزمان از یک کانکشن استفاده کنید برای این کار یا باید کاری که کاربر shahab2025 گفت انحام بدید یا باید از 2 کانکشن جدا استفاده کنید

Pouria.NET
یک شنبه 21 بهمن 1386, 15:25 عصر
قابلیت MARS که در .NET 2 اضافه شده این امکان را می دهد که بر روی یک Connection دو تا یا بیشتر Reader بصورت Open داشته باشیم کد زیر رو نگاه کنید:




Dim cmd As SqlCommand = conn.CreateCommand()
Dim cmd2 As SqlCommand = conn.CreateCommand()
cmd.CommandText=
"select * from customers"
cmd2.CommandText=
"Update Customers set FirstName='Tarzan' where CustomerId = @CustomerID"
Dim custID As SqlParameter = cmd2.Parameters.Add("@CustomerID",SqlDbType.Int)
reader=cmd.ExecuteReader()
While reader.Read()
ProcessOperation() ' Some dummy function
custID.Value=reader.GetInt32(0) ' CustomerID
cmd2.ExecuteNonQuery()
End While





در صورت اجرای این کد Exception ایجاد می شود چرا که یک Reader باز است و ما باز هم از همان Connection استفاده می کنیم. برای رهایی از این مشکل در Connection String عبارت زیر را وارد کنید:
MultipleActiveResultsets = true
نکته: این عبارت برای sqlClient است و برای oleDB عبارت به شکل Mars Connection=true و برای ODBC به صورت MARS_Connection=true خواهد بود.

near_86
یک شنبه 21 بهمن 1386, 21:22 عصر
میشه لطف کنید بیشتر توضیح بدید

من اینکارو انجام دادم اما باز هم خطا داد

There is already an open DataReader associated with this Command which must be closed first.

babakj
دوشنبه 22 بهمن 1386, 17:29 عصر
میشه لطف کنید بیشتر توضیح بدید

من اینکارو انجام دادم اما باز هم خطا داد

There is already an open DataReader associated with this Command which must be closed first.

در دات نت 2
از دات نت 2 استفاده می کنی ؟؟؟
محاله خطا بده . :متفکر:

near_86
سه شنبه 23 بهمن 1386, 09:15 صبح
من از .net 2 استفاده میکنم

زیاد به استفاده از vb.net مسلط نیستم
این کدی هست که از اون استفاده میکنم
لطفا کمکم کنید و بگید مشکل کجاست



Try
PubSqlCon.ConnectionString = PubStrConString
PubSqlCom.CommandText = "SELECT * FROM students WHERE stu_nu1 between '" & stu1 & "' and '" & stu2 & "'"
PubSqlCom.Connection = PubSqlCon
If PubSqlCon.State = ConnectionState.Open Then PubSqlCon.Close()
If PubSqlCon.State = ConnectionState.Closed Then PubSqlCon.Open()
PubSqlDR = PubSqlCom.ExecuteReader()

If PubSqlDR.HasRows Then

While PubSqlDR.Read()
text = PubSqlDR("stu_nu1")
PubSqlCom.CommandText = "Select * from sales where stu_nu like '" & text & "' and code_book like '" & Txtcbook.Text & "'"
PubSqlCom.Connection = PubSqlCon
'If PubSqlCon.State = ConnectionState.Open Then PubSqlCon.Close()
If PubSqlCon.State = ConnectionState.Closed Then PubSqlCon.Open()
PubSqlDR = PubSqlCom.ExecuteReader()
PubSqlDR.Read()
If PubSqlDR.HasRows Then
PubSqlCom.CommandText = "INSERT INTO sales ( stu_nu,code_book,price_sale ,date_sale,price_logic) VALUES (N'" & text & "',N'" & Txtcbook.Text & "',N'" & Txtprice.Text & "',N'" & Txtdate.Text & "',N'" & 0 & "')"
'If PubSqlCon.State = ConnectionState.Open Then PubSqlCon.Close()
If PubSqlCon.State = ConnectionState.Closed Then PubSqlCon.Open()
PubSqlCom.ExecuteReader()
'If PubSqlCon.State = ConnectionState.Open Then PubSqlCon.Close()
Fun_exist_update_book()

Else' has row sales
و...

aftab3000
سه شنبه 23 بهمن 1386, 21:29 عصر
چرا از Dataset استفاده نمی کنی ؟ هم بهتره هم با کلاس تره هم تکنیک برنامه نویسی بهتری داره و گیرای Reader رو نمیده.