내 VB.NET 코드에서 SQLSERVER 2008에서 테이블의 레코드를 제거하는 저장 프로 시저를 호출하기 위해 ODBC.COMMAND를 생성하고 FOR NEXT 루프에서이 코드를 사용하며 1에서 20 개의 records_ID가 저장 될 수 있습니다 레코드 삭제 절차.저장 프로 시저를 두 번만 실행할 수있는 이유는 무엇입니까?
이 코드는 몇 개월 동안 잘 작동하지만 마지막 컴파일 이후 처음 두 레코드 만 삭제합니다.
VS 2008 IDE의 디버그 모드에서 정상적으로 작동합니다. 당신의 DELETE가보기에 의존하는 경우
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
저장 프로 시저 코드, 실행되는 데이터 모델 및 저장 프로 시저를 호출하는 코드가 필요합니다. –
도움을 받으려면 코드를 참조하십시오. –
당신은 정말로 귀하의 SP와 귀하의 호출 VB 코드를 붙여 넣는 것을 고려해야합니다 ... –