ورود

View Full Version : سوال: بسته شدن Recordset بلافاصله پس از اجرای Command



Bisavad_Moshtagh
یک شنبه 09 تیر 1387, 17:23 عصر
سلام
من برنامه ای دارم باید توش یک stored procedure رو اجرا کنم. فرقی نداره که عملیاتStoredprocedure چجوری انجام بشه نهایتا چند تا مقدار رو برمیگردونه که اولی همیشه پره و بقیه بستگی به عملیات داره....
حالا من این SP رو با کدهای زیر فراخوانی میکنم. Sp اجرا میشه، توی DB تغییرات اعمال میشه اما بلافاصله بعد از اجرا Recordset بسته میشه و من به اطلاعاتش دسترسی ندارم....
جالبتر اینکه این کد چندین روز پیش داشت جواب میداد اما الان علیرغم یکسان بودن DB و سایر موارد این Error رو بهم میده...
نمیتونم با بررسی state و استفاده از دستور open مشکل رو برطرف کنم چون با یکبار اجرا رکورد مورد نظرم دیگه حائز شرایط Update نیست و SPمن بهم پیغام میده....
search هم کردم ولی چیز مرتبطی ندیدم
پیشاپیش متشکرم
Error دریافتی:(خط ستاره دار)
operation is not allowed when the object is closed

فراخوانیSP در VB:




Public Function ExitChassis() As Boolean
Dim st As Integer
If cnn.State = adStateOpen Then cnn.Close
cnn.Open (cnnstr)
With com
.ActiveConnection = cnn
.CommandText = " declare @NewEngine as nvarchar(50) , @NewGearbox as nvarchar(50) , @NewKeyNumber as nvarchar(50) ,@st as int ,@msg as nvarchar(1000) "
.CommandText = .CommandText + " "
.CommandText = .CommandText + " exec [dbo].[sp_PelackExitChassis] "
.CommandText = .CommandText + " '" + txtVIN.Text + "','" + txtEngine.Text + "','" + txtGearBox.Text + "','" + txtKeynumber.Text + "','" + lblToday.Caption + "', @NewEngine =@NewEngine output , @NewGearbox =@NewGearbox output , @NewKeyNumber =@NewKeyNumber output ,@st =@st output,@msg =@msg output "
.CommandText = .CommandText + " select @st , @NewEngine , @NewGearbox , @NewKeyNumber , @msg "
.CommandType = adCmdText
Set rs = .Execute
End With
'***********************
If Not (rs.EOF Or rs.BOF) Then
'***********************
If IsNull(rs.Fields(0)) Or IsNull(rs.Fields(0).Value) Then
st = 1
Else
st = CInt(rs.Fields(0).Value)
If st = 0 Then
txtEngine.Text = rs.Fields(1).Value
txtGearBox.Text = rs.Fields(2).Value
txtKeynumber.Text = rs.Fields(3).Value
ExitChassis = True
Else
If Not (IsNull(rs.Fields(4)) Or IsNull(rs.Fields(4).Value)) Then MsgStr = rs.Fields(4).Value
MsgStr = Replace(MsgStr, "$", "-")
End If
End If
Else
st = 1
End If
If st = 1 Then ExitChassis = False
If cnn.State = adStateOpen Then cnn.Close


End Function

Bisavad_Moshtagh
دوشنبه 10 تیر 1387, 14:07 عصر
خوب مشکل پیدا شد، بعد از اجرا در Query analyzer دوبار پیغام 1rows affected رو نشون میده که این باعث مشکل recordset میشه، بنابراین باید کاری کنم که SP من بدون خروجی اجرا بشه...
کسی میدونه چه جوری؟
قبلا دیدمش اما الان هرچی میگردم نیست
راهنمائی بفرمائید لطفا

Bisavad_Moshtagh
شنبه 15 تیر 1387, 18:28 عصر
از راهنمائی همه حضار متشکر و سپاس گذارم

اگر دستور زیر رو قبل از اجرای SP مینوشتم مشکل حل میشد که شد:

Set no count on
و بعدش:
Set no count off