PDA

View Full Version : راهنمایی در مورد خطا



hamidafs
پنج شنبه 13 اردیبهشت 1386, 18:06 عصر
با سلام خدمت دوستان
خطاایی رو در برنامه از من می گیره اگز دوستان راه حل و دلیل اونو می دونند مچکر میشم راهنمایی کنند.(برنامه رو می ذارم)
خطا:


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

کد برنامه:

reza_rad
پنج شنبه 13 اردیبهشت 1386, 18:09 عصر
شما یه دیتاریدر رو باز کردی ولی Close اش نکردی.

hamidafs
پنج شنبه 13 اردیبهشت 1386, 19:50 عصر
با تشکز آقای راد
من دیتاریدر مو close کردم.

hamidafs
جمعه 14 اردیبهشت 1386, 01:44 صبح
با سلام
اگر از دوستان کسی لطف کنند در مورد مشکل برنامه نظر ی بدند مچکر می شم.
من از فرم اولم اطلاعاتی رو به فرم دومم می فرستم و در فرم دوم در page_load صفحه. دو پروسیجررو فراخانی می کنم که پروسیجر اولی توسط دیتاریدر از دیتابیس اطلاعاتی رو به داخل تکس باکس میریزم و پروسیجر دومی هم اطلاعاتی در داخل دیتاگرید میریزم و البته اینکه دیتاریدر رو close کردم.



()Sub select_datagrid
Dim str As String
str = "Select * From karid where nameproduct= '" & TextBox2.Text & "' and priceproduct='" & TextBox3.Text & "'"
(Dim objDataAdapter As New OleDbDataAdapter( str, objConnection
Dim ds As New DataSet
objConnection.Open
("objDataAdapter.Fill(ds, "karid
("DataGrid1.DataSource = ds.Tables("karid
DataGrid1.DataBind
objConnection.Close
End Sub
********
()sub select_datareader
("TextBox1.Text = Request.QueryString("idproduct
()objConnection.Open
Dim objCommand As New OleDbCommand
objCommand = New OleDbCommand("select * from karid where (idproduct=@idproduct", objConnection
(objCommand.Parameters.Add("@idproduct", TextBox1.Text
()dr = objCommand.ExecuteReader
If dr.Read() Then
("TextBox2.Text = dr("nameproduct
("TextBox3.Text = dr("priceproduct
End If
()dr.Close
()objConnection.Close
end sub
*****************
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
select_datagrid
select_datareader
End Sub

Alireza_Salehi
جمعه 14 اردیبهشت 1386, 10:30 صبح
اول اینکه این dr کجا تعریف شده؟

حتما جای دیگه استفاده شده و بدون این که بسته بشه رها شده.

دوم این که به جای این


Dim objCommand As New OleDbCommand
objCommand = New OleDbCommand("select * from karid where (idproduct=@idproduct)", objConnection)

این را بنویسید ،(2 بار نمونه سازی انجام دادید که لازم نیست):


Dim objCommand As New OleDbCommand("select * from karid where (idproduct=@idproduct)", objConnection)

یا این


Dim objCommand As OleDbCommand
objCommand = New OleDbCommand("select * from karid where (idproduct=@idproduct)", objConnection)


در ضمن من پیشنهاد میکنم به ازای هر قسمتی که کار جداگانه ای با db انجام میده Connection های جدا بسازید و استفاده از Connection های Global رو پیشنهاد نمیکنم.

سوم این که به جای این


objCommand.Parameters.Add("@idproduct", TextBox1.Text)


باید این طوری بنویسید (البته نوع داده اون فیلد رو من نمیدونستم):


objCommand.Parameters.Add("@idproduct", OleDbType.Integer).Value = TextBox1.Text


چهارم این که قبل از نسبت دادن مقادیر به TextBox ها حتما آنها را به String تبدیل کنید یعنی به جای:


TextBox2.Text = dr("priceproduct")

این را بنویسید:


TextBox2.Text = dr("priceproduct").ToString()