2017-01-17 5 views
2

ここに最初の投稿がありますので、あらかじめご理解ください。私は私のタイヤを回転させて、私のウェブアプリケーションに挿入されたprocを実行させています。私は目のいくつかのセットが助けてくれることを望んでいます。レコードの追加中にエラーが発生しました。プロシージャまたは関数 'InsertCurrencyRecord'はパラメータ '@PortfolioOwnerId'を予期します

最初は私のストアドプロシージャです。

CREATE PROCEDURE dbo.InsertCurrencyRecord 
    @SubCategoryId INT, @PortfolioOwnerId INT, 
    @OwnerId INT, @ContactId INT, 
    @LocationId INT, 
    @Model VARCHAR(50), @Version VARCHAR(15) = NULL, 
    @Vendor VARCHAR(50), @AvailableDate DATE, 
    @EndOfProduction DATE, @EndOfSupport DATE, 
    @NumOfDevices VARCHAR(50), @Costs MONEY, 
    @UpgradeDuration INT, 
    @Description VARCHAR(250), @SupportingComments VARCHAR(250) 
AS 
INSERT INTO dbo.Currency (SubCategoryId, PortfolioOwnerId, OwnerId, ContactId, LocationId, Model, Version, Vendor, AvailableDate, EndOfProduction, EndOfSupport, NumOfDevices, Costs, UpgradeDuration, Description, SupportingComments, ModifiedDate) 
VALUES (@SubCategoryId, @PortfolioOwnerId, @OwnerId, @ContactId, @LocationId, @Model, @Version, @Vendor, @AvailableDate, @EndOfProduction, @EndOfSupport, @NumOfDevices, @Costs, @UpgradeDuration, @Description, @SupportingComments, GETDATE()); 
GO 

第2のパラメータは、自分のパラメータの一部を取得するべきであるasp.dropdownlistsです。 SubcategoryIdは最初のパラメータであるため、PortfolioIdである2番目のパラメータは提供されていないようですが、2つのパラメータの間には違いはありません。

<td style="text-align: right">SubCategory:</td> 
     <td> 
      <%-- Confirm from database what max length is --%> 
      <asp:DropDownList ID="DDSubCategory" runat="server" Height="20px" Width="175px" AutoPostBack="True"> 
      </asp:DropDownList> 
      <asp:RequiredFieldValidator ID="SubCategoryValidator" runat="server" ControlToValidate="DDSubCategory" Display="Dynamic" ErrorMessage="SubCategory Required" ValidationGroup="AllValidators" ForeColor="Red">*</asp:RequiredFieldValidator> 
     </td> 
     <td style="text-align: right; width: 181px;">Portfolio Owner:</td> 
     <td> 
      <asp:DropDownList ID="DDPortfolioOwner" runat="server" Height="20px" Width="175px" AutoPostBack="True"> 
      </asp:DropDownList> 
      <asp:RequiredFieldValidator ID="PortfolioOwnerValidator" runat="server" ControlToValidate="DDPortfolioOwner" Display="Dynamic" ErrorMessage="Portfolio Owner Required" ValidationGroup="AllValidators" ForeColor="Red">*</asp:RequiredFieldValidator> 
     </td> 

最後に、ストアドプロシージャを実行するための送信ボタンクリックメソッドを示すC#コードになります。

ここ
protected void SubmitBtn_Click(object sender, EventArgs e) { 
     if (Page.IsValid) { 
      string constr = ConfigurationManager.ConnectionStrings["CurrencyDb"].ConnectionString; 
      SqlConnection con = new SqlConnection(constr); 
      SqlCommand cmd = new SqlCommand("dbo.InsertCurrencyRecord", con); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@SubCategoryId", DDSubCategory.SelectedIndex); 
      cmd.Parameters.AddWithValue("@PorfolioOwnerId", DDPortfolioOwner.SelectedIndex); 
      cmd.Parameters.AddWithValue("@OwnerId", DDTechOwner.SelectedIndex); 
      cmd.Parameters.AddWithValue("@ContactId", DDTechContact.SelectedIndex); 
      cmd.Parameters.AddWithValue("@LocationId", DDBranch.SelectedIndex); 
      cmd.Parameters.AddWithValue("@Model", ModelBox.Text); 
      cmd.Parameters.AddWithValue("@Version", VersionBox.Text); 
      cmd.Parameters.AddWithValue("@Vendor", VendorBox.Text); 
      cmd.Parameters.AddWithValue("@AvailableDate", ProductAvailableBox.Text); 
      cmd.Parameters.AddWithValue("@EndOfProduction", EndProductionBox.Text); 
      cmd.Parameters.AddWithValue("@EndOfSupport", EndOfSupportBox.Text); 
      cmd.Parameters.AddWithValue("@NumOfDevices", NumDevicesBox.Text); 
      cmd.Parameters.AddWithValue("@Costs", UpgradeCostBox.Text); 
      cmd.Parameters.AddWithValue("@UpgradeDuration", UpgradeDurationBox.Text); 
      cmd.Parameters.AddWithValue("@Description", DescriptionBox.Text); 
      cmd.Parameters.AddWithValue("@SupportingComments", NotesBox.Text); 

      try { 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
       labelMessage.Text = "Your request has been submitted for review."; 
      } 
      catch (Exception ex) { 
       throw new Exception("Error adding record. " + ex.Message); 
      } 
      finally { 
       if (con != null) 
        con.Close(); 
      } 
     } 
+0

はこれを読んで、予想されるパラメータを受信しないポルトン folioOwnerIdでt

を逃していますhttp://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-usingを使用することもできます-addwithvalue-already/ –

+0

@JamesZ OPがストアドプロシージャを使用しているため、AddWithValueで発生する可能性のあるデータ型の不一致が大幅に最小限に抑えられます。私はまだ私のコードで明示的に好むが。 :) –

答えて

2

cmd.Parameters.AddWithValue("@PorfolioOwnerId", DDPortfolioOwner.SelectedIndex) 

そうプロシージャ 'InsertCurrencyRecordは' '@PortfolioOwnerId'

+0

:| それは恥ずかしい最初の投稿でした。 これを見て見つけてくれてありがとう。 – David

関連する問題