2017-03-05 10 views
0

Iテーブルを持っていますプロシージャは、次のように定義されます。(ドロップダウンリストの値にデータベースの値を掛けて、それらを水平に合計し、最終結果にリソールを表示する必要があります。は、C#でのSQLServerにストアドプロシージャにドロップダウンリストの値を渡す方法

CREATE PROCEDURE [dbo].[Cstored]  
AS 
BEGIN 
    SET NOCOUNT ON; 
DECLARE @Ta int 
DECLARE @Em int 
DECLARE @Ma int 
DECLARE @Sa int 

SET @Em = 8 >>>> need to be set by user selection in dropdows list 
SET @Ta= 6  >>>> need to be set by user selection in dropdows list 
SET @Sa= 5  >>>> need to be set by user selection in dropdows list 
SET @Ma = 7 >>>> need to be set by user selection in dropdows list 

SELECT 
    Namec, 
    Tar*@Ta AS val1, 
    Emk*@Em as val2, 
    Mas*@Ma as val3, 
    San*@Sa As val4, 
    (Tar*@Ta)+(Emk*@Em)+(Mas*@Ma)+(San*@Sa) as finalresult 
FROM Cdetail 
END 

上記のスクリーンショットのとおり、データベースでうまく動作しますが、値は手動で設定されています。ユーザーの選択によって値を設定します。

SET @Em = 8 

それはデータベースのためだったが、私は次のようにユーザーが値を選択するために、ASP Webページにいくつかのドロップダウンを作成しました:

<form id="form1" runat="server"> 
     <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" > 
      <asp:ListItem Value="@Em">Emk</asp:ListItem> 
      <asp:ListItem Value="@Ta">Tar</asp:ListItem> 
      <asp:ListItem Value="@Sa">San</asp:ListItem> 
      <asp:ListItem Value="@Ma">Mas</asp:ListItem> 
     </asp:DropDownList> 
     <br /> 
     <asp:DropDownList ID="DropDownList2" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 
      <asp:ListItem Value="@Em">Emk</asp:ListItem> 
      <asp:ListItem Value="@Ta">Tar</asp:ListItem> 
      <asp:ListItem Value="@Sa">San</asp:ListItem> 
      <asp:ListItem Value="@Ma">Mas</asp:ListItem> 
     </asp:DropDownList> 
     <br /> 
     <asp:DropDownList ID="DropDownList3" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 
      <asp:ListItem Value="@Em">Emk</asp:ListItem> 
      <asp:ListItem Value="@Ta">Tar</asp:ListItem> 
      <asp:ListItem Value="@Sa">San</asp:ListItem> 
      <asp:ListItem Value="@Ma">Mas</asp:ListItem> 
     </asp:DropDownList> 
     <br /> 
     <asp:DropDownList ID="DropDownList4" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 
      <asp:ListItem Value="@Em">Emk</asp:ListItem> 
      <asp:ListItem Value="@Ta">Tar</asp:ListItem> 
      <asp:ListItem Value="@Sa">San</asp:ListItem> 
      <asp:ListItem Value="@Ma">Mas</asp:ListItem> 
     </asp:DropDownList> 

各ドロップダウンが次のようにデフォルト値を持っている必要があります:

DropDownList1.SelectedValue = 8; 
DropDownList2.SelectedValue = 7; 
DropDownList3.SelectedValue = 6; 
DropDownList4.SelectedValue = 5; 

これは、ドロップダウン1で選択された値が数字8(DD2数字7など)でストアドプロシージャに送信され、変数に関連するvデータベース内のalue。 以降、finalresultの値をgridviewに上から下に示します。

私は次のコードで試しましたが、うまくいかず、私はどのようにストアドプロシージャにドロップダウンの値を送信し、選択に基づいて各アイテムをフィードできますかわかりません。ユーザがdropdow 1 Emkを選択した場合

protected void Button1_Click(object sender, EventArgs e) 
     { 
      DropDownList1.SelectedValue = 8; 
      DropDownList2.SelectedValue = 7; 
      DropDownList3.SelectedValue = 6; 
      DropDownList4.SelectedValue = 5; 

      SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["carConnectionString"]); 
      sqlCon.Open(); 
      SqlCommand scCommand = new SqlCommand("Carstored", sqlCon); 
      scCommand.CommandType = CommandType.StoredProcedure; 
      scCommand.Parameters.AddWithValue("????", DropDownList1); 
      scCommand.Parameters.AddWithValue("????", DropDownList2); 
      scCommand.Parameters.AddWithValue("????", DropDownList3); 
      scCommand.Parameters.AddWithValue("????", DropDownList4); 
      using (SqlDataAdapter sda = new SqlDataAdapter(scCommand)) 
      { 
       DataTable dt = new DataTable(); 
       sda.Fill(dt); 
       GridView1.DataSource = dt; 
       GridView1.DataBind(); 

Iは、必要な値に、8数は、テーブル内のすべてのEmkの値に(X)を乗算し、ユーザがdropdow 2 Tarを選択した場合、7数(X)を乗算しテーブルのTarの代わりに、あなたのストアドプロシージャで変数を宣言するの

答えて

0

、パラメータを宣言:

DataTable dt; 
using(var sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["carConnectionString"])) 
{ 
    sqlCon.Open(); 
    using(var scCommand = new SqlCommand("Carstored", sqlCon)) 
    { 
     scCommand.CommandType = CommandType.StoredProcedure; 
     scCommand.Parameters.Add("@Ta", SqlDbType.Int).Value = DropDownList1.SelectedValue; 
     scCommand.Parameters.Add("@Em", SqlDbType.Int).Value = DropDownList2.SelectedValue; 
     scCommand.Parameters.Add("@Ma", SqlDbType.Int).Value = DropDownList3.SelectedValue; 
     scCommand.Parameters.Add("@Sa", SqlDbType.Int).Value = DropDownList4.SelectedValue; 
     using (SqlDataAdapter sda = new SqlDataAdapter(scCommand)) 
     { 
      dt = new DataTable(); 
      sda.Fill(dt); 
     } 
    } 
} 
+0

それは動作しません、エラーがある:

CREATE PROCEDURE [dbo].[Cstored] ( @Ta int, @Em int, @Ma int, @Sa int ) AS BEGIN SET NOCOUNT ON; SELECT Namec, Tar*@Ta AS val1, Emk*@Em as val2, Mas*@Ma as val3, San*@Sa As val4, (Tar*@Ta)+(Emk*@Em)+(Mas*@Ma)+(San*@Sa) as finalresult FROM Cdetail END 

次に、あなたのC#コードでは、このような何かを行いますStoredProcedureでは、ドロップダウンリストのデフォルト値はありません(DropDownList1.SelectedValue = 8;など) – Mom

+0

どのようなエラーがありましたか?ユーザー入力を検証する必要があります... –

+0

in 'sda.Fill(dt);' (DropDownList1.SelectedValue = 8; DropDownList2.SelectedValue = 7; DropDownList3.SelectedValue =(デフォルトのドロップダウン値の定義を見つけることができませんでした)このエラー(文字列からInt32へのパラメータ値の変換に失敗しました)、 また、 6; DropDownList4.SelectedValue = 5;)) – Mom

関連する問題