2010-11-23 11 views
0

INSERTを実行するSQLストアドプロシージャを呼び出そうとしています。しかし、私がvb.netのコードを見ていると、"プロシージャまたは関数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

コードとSQ​​Lプロシージャーを投稿できるのであれば、ここで誰かが余分な引数を見つけることができます;) –

+0

パラメーター付き照会またはストレート文字列INSERTを使用していますか? – Tom

+0

param queries .. – user279521

答えて

1

このお試しください:SQL Serverではシステム・プロシージャの略sp_を使用してストアドプロシージャ名を開始し、意志しないでください

  1. をSQL Serverがあなたのプロシージャを探して余分な仕事をする(これはあなたの問題ではないが、bそれは良い習慣です)。
  2. プログラムが作成したプロシージャ文字列を取り出し、SQL Server管理スタジオウィンドウに貼り付けて、そこで動作することを確認します。そうでない場合は、問題がどこにあるかを知ることができます。
  3. もしそうなら、自分が思っているデータベースに当たっていることを確認してください。あなたが複数の環境を持っているなら、あなたが当てているデータベースは、正しい数のパラメータを持っているデータベースではないかもしれません。
+0

クレイジーな解像度ですが、cmdオブジェクトは以前のルーチンで閉じられていないので、別のストアドprocをポイントしていました。 – user279521

0

コードをステップ実行すると、ストアドプロシージャとそのパラメータが、おそらくSqlCommandオブジェクトに設定されていることがあります。 は、ブレークポイントでsproc呼び出しをキャプチャできます。次に、クエリツールにコピーし、EXECを呼び出してsproc呼び出しを貼り付けます。次に実行します。これにより、コードが送信している正確なストアドプロシージャ呼び出しを実行します。

コードの詳細については、sproc呼び出しをキャプチャする方法を詳しく説明しています。