2010-11-23 3 views
0

INSERT를 수행하는 SQL 저장 프로 시저를 호출하려고합니다. 그러나, 내 vb.net 코드 walkthrough 때 "프로 시저 또는 함수 sp_InsertARPlanner 너무 많은 인수가 지정되어 있습니다."라는 메시지가 나타납니다.vb.net SQL 명령 디버그

VB에서 SQL 문자열에 저장 프로 시저와 동일한 # of params가 있습니다.

어떻게 디버깅 할 수 있습니까?

업데이트

SQLCmd.CommandText = "sp_InsertARPlanner" 
    SQLCmd.CommandType = CommandType.StoredProcedure 

SQLCmd.Parameters.AddWithValue("@Origin", Trim(txtOrigin.Text)) 
SQLCmd.Parameters.AddWithValue("@Destination", Trim(txtDest.Text)) 
SQLCmd.Parameters.AddWithValue("@Miles", iMiles) 
SQLCmd.Parameters.AddWithValue("@Rate", iAvgRateperMile) 
SQLCmd.Parameters.AddWithValue("@MinCost", dMinCost) 
SQLCmd.Parameters.AddWithValue("@Zone", sZone) 
SQLCmd.Parameters.AddWithValue("@LaneHaulCost", dLaneHaulCost) 
SQLCmd.Parameters.AddWithValue("@TotalCost", dTotalCost)    
SQLCmd.Parameters.AddWithValue("@TotalWithSurch", dTotalWithSurch) 
SQLCmd.Parameters.AddWithValue("@AvgTypeRate", sAvgTypeRate)  
SQLCmd.Parameters.AddWithValue("@AvgLoads", sAvgLoads)   
SQLCmd.Parameters.AddWithValue("@FuelLevel", dFuelPercent)  
SQLCmd.Parameters.AddWithValue("@Fuel", dFuelAmount)  
SQLCmd.Parameters.AddWithValue("@AverageRateAmount", dAverageRateAmount) 
SQLCmd.Parameters.AddWithValue("@Floor", decFloor) 
SQLCmd.Parameters.AddWithValue("@RainBulkRate", decBulkRate) 
SQLCmd.Parameters.AddWithValue("@RateComments", txtRateDesc..Text) 
SQLCmd.Parameters.AddWithValue("@PremiumField", txtPremium.Text) 
SQLCmd.Parameters.AddWithValue("@EquipCategory", Trim(cboEquipType.Text)) 
SQLCmd.Parameters.AddWithValue("@UpdateDate", DateTime.Now) 
SQLCmd.Parameters.AddWithValue("@FreightDesc", "txtFreightDesc.Text") 

Try 
    SQLCmd.ExecuteNonQuery() 
Catch ex As Exception 
    MsgBox(ex.Message) 
    SQLCon.Close() 
    SQLCmd.Parameters.Clear() 
    Exit Sub 
End Try 

ALTER PROCEDURE [dbo].[sp_InsertARPlanner] 
    (@Origin nvarchar(150) 
      ,@Destination nvarchar(150) 
      ,@Miles nvarchar(50) 
      ,@Rate nvarchar(5) 
      ,@MinCost decimal(5,2) 
      ,@Zone varchar(3) 
      ,@LaneHaulCost decimal(5, 2) 
      ,@TotalCost decimal(5, 2) 
      ,@TotalWithSurch decimal(5, 2) 
      ,@AvgTypeRate varchar(50) 
      ,@AvgLoads varchar(4) 
      ,@FuelPercent decimal(5,2) 
      ,@FuelAmount decimal(5,2) 
      ,@AverageRateAmount decimal(5,2) 
      ,@Floor decimal(5, 2) 
      ,@RainBulkRate decimal(5, 2) 
      ,@RateComments nvarchar(50) 
      ,@PremiumField nvarchar(50) 
      ,@EquipCategory nvarchar(50) 
      ,@UpdateDate datetime 
      ,@FreightDesc nvarchar(50)) 
+2

코드 및 SQL 프로 시저를 게시 할 수 있으면 여기에있는 누군가가 추가 인수를 찾을 수 있습니다. –

+0

매개 변수가있는 쿼리 또는 직선 문자열 INSERT를 사용하고 있습니까? – Tom

+0

param queries .. – user279521

답변

1

이 시도 :

  • 는 SQL Server의 시스템 프로 시저를 의미 sp_하여 저장 프로 시저의 이름을 시작하지 마십시오

      것 SQL Server가 프로 시저를 찾는 추가 작업을 수행하게 만듭니다 (이 문제는 사용자의 문제가 아닙니다. b 유창한 연습).
    1. 프로그램에서 만든 프로 시저 문자열을 가져 와서 SQL Server 관리 스튜디오 창에 붙여 넣은 다음 해당 프로 시저 문자열이 제대로 작동하는지 확인하십시오. 그렇지 않다면 문제가 어디에 있는지 알 수 있습니다.
    2. 그렇다면 자신이 생각하는 DB를 치고 있는지 확인하십시오. 여러 개의 환경이있는 경우 올바른 데이터베이스 수를 가진 데이터베이스가 아닐 수도 있습니다.
  • +0

    미친 해상도이지만 cmd 객체가 이전 루틴에서 닫히지 않았으므로 다른 저장된 proc를 가리 킵니다. – user279521

    0

    코드를 실행하면 SqlCommand 개체에 저장 프로 시저와 해당 매개 변수가 채워지는 지점이 생깁니다. 은 브레이크 포인트에서 sproc 호출을 캡처 할 수 있습니다. 그런 다음 쿼리 도구에 복사하고 EXEC를 호출하여 sproc 호출을 붙여 넣습니다. 그런 다음 실행하십시오. 그렇게하면 코드가 전송하는 정확한 저장 프로 시저 호출을 실행하게됩니다.

    코드에 대한 자세한 내용을 제공하는 경우 정확하게 sproc 호출을 캡처하는 방법에 대해 자세히 설명 할 수 있습니다.