Отладка SQL-команды vb.net - PullRequest
0 голосов
/ 23 ноября 2010

Я пытаюсь вызвать хранимую процедуру SQL, которая выполняет INSERT. Однако, когда я прохожу свой код на vb.net, я получаю сообщение: "Процедура или функция sp_InsertARPlanner имеет слишком много аргументов."

Я дважды проверил, но строка SQL в VB имеет такое же количество параметров, как и в хранимой процедуре.

Есть идеи, как я могу это отладить?

Обновление

    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 ]

1 голос
/ 23 ноября 2010

Попробуйте это:

  1. Не начинайте имя вашей хранимой процедуры с sp_ Это означает системную процедуру на сервере sql и заставит сервер SQL выполнять дополнительную работу по поиску вашей процедуры (хотя это не ваша проблема, но это хорошая практика ).
  2. Возьмите строку процедуры, созданную программой, и вставьте ее в окно студии управления sql server, чтобы убедиться, что она работает там. Если нет, то вы знаете, где проблема.
  3. Если это так, убедитесь, что вы попали в БД, как вы думаете, что вы есть. Если у вас несколько сред, возможно, база данных, к которой вы обращаетесь, не соответствует правильному количеству параметров.
0 голосов
/ 23 ноября 2010

При пошаговом выполнении вашего кода будет точка, в которой хранимая процедура и ее параметры будут заполнены, возможно, объектом SqlCommand. Вы можете захватить этот вызов sproc в точке останова . Затем скопируйте его в свой инструмент запросов, вызовите EXEC и вставьте вызов sproc. Затем запустите его. Таким образом, вы будете точно выполнять вызов хранимой процедуры, отправляемый вашим кодом.

Если вы предоставите более подробную информацию о своем коде, мы можем более точно указать, как именно перехватить вызов sproc.

...