在我的VB.NET代碼中,我構造了一個ODBC.COMMAND來調用SQLSERVER 2008中從表中刪除記錄的存儲過程,我在FOR NEXT循環中使用此代碼,它可能包含1到20個records_ID以傳遞給存儲程序刪除記錄。爲什麼我只能執行一次存儲過程兩次?
此代碼可以正常工作數月,但自上次編譯以來,它只會刪除前2條記錄。
在VS 2008中的調試模式下IDE工作正常。
VB.NET代碼
''' <summary>
''' DELETE CANCELED CUSTOMER ORDERS
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub tsbDiarioVenta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbDiarioVenta.Click
On Error GoTo Proc_Err
Using frmrslt As New BuscarForm()
frmrslt.Titulo = "Elimina Diarios de Venta en Contabilidad"
frmrslt.TextFieldID = "Cg_MovCab_ID"
frmrslt.Sql = " SELECT TIPO_COMP, NUM_COMP, FEC_DOC, COD_AUX, COD_REF, NUM_REF, STATUS, Cg_MovCab_ID " & _
" FROM Cg_MovCab " & _
" WHERE COD_EMPR = " & DataShared.gintCODEMPR & _
" AND YEAR(FEC_DOC) = " & Me.txtPER_ANUAL.Text & _
" AND MONTH(FEC_DOC) = " & Me.txtPER_MENSUAL.Text & _
" AND COD_REF IN ('FAC', 'NV') " & _
" ORDER BY 1,2 "
frmrslt.ShowDialog()
If frmrslt.Selected Then
Debug.Print(frmrslt.CountRows.ToString)
If frmrslt.CountRows > 0 Then
Cursor.Current = Cursors.WaitCursor
frmrslt.StartRow()
Dim idx As Integer
For idx = 0 To frmrslt.CountRows
Debug.Print(frmrslt.KeyValueID)
ClsCgMovs.DeleteID(frmrslt.KeyValueID)
frmrslt.NextRow()
Next
MsgBox(frmrslt.CountRows.ToString & " Regs. Eliminados", MsgBoxStyle.Information, "Mensaje del Sistema")
End If
End If
End Using
Cursor.Current = Cursors.Default
Exit Sub
Proc_Err:
Cursor.Current = Cursors.Default
ErrHnd(Err.Number, Err.Description, ONDEBUG, "Frm_VtActLote: tsbDiarioVenta_Click: ", Erl)
End Sub
Public Function DeleteID(ByVal PRowID As Integer) As Boolean
On Error GoTo Proc_Err
Using odbcconn As New OdbcConnection(DataShared.gstrCNN)
odbcconn.Open()
Dim OdbcCmd As New OdbcCommand(_
"{ ?=CALL proc_Cg_MovCab_DeleteID(" & PRowID & ") }", odbcconn)
OdbcCmd.Parameters.Add("@return", OdbcType.Int)
OdbcCmd.Parameters("@return").Direction = ParameterDirection.ReturnValue
OdbcCmd.ExecuteNonQuery()
If CInt(OdbcCmd.Parameters("@return").Value) = 0 Then
DeleteID = True
Else
DeleteID = False
End If
End Using
Exit Function
Proc_Err:
ErrHnd(Err.Number, Err.Description, ONDEBUG, "ClsCgMovs: DeleteID: ")
DeleteID = False
End Function
ALTER PROCEDURE [dbo].[proc_Cg_MovCab_DeleteID]
(
@ID int
)
AS
SET NOCOUNT ON
DECLARE @errornum int
BEGIN TRAN
DELETE FROM Cg_MovCab
WHERE Cg_MovCab_ID = @ID
SET @errornum = @@ERROR
IF @errornum <> 0 GOTO PROC_ERR
COMMIT TRAN
RETURN @errornum
PROC_ERR:
ROLLBACK TRAN
RETURN @errornum
我們將需要存儲過程代碼,它執行的數據模型以及調用存儲過程的代碼。 – 2009-11-24 17:34:03
我們需要查看您的代碼以獲取幫助。 – 2009-11-24 17:34:30
你真的應該考慮粘貼你的SP和你的調用VB代碼... – 2009-11-24 17:34:51