创建存储的procudure以将Dropdown列表的值与数据库中的值相乘

时间:2017-03-06 21:14:48

标签: c# sql-server stored-procedures

我有一个存储过程如下:(并且有一个表包含一些列,包括'Ta''Em''Ma''Sa',其中有几个不同的记录)

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

并且网页包含一些下拉列表,如下所示:

<form id="form1" runat="server">
        <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" >
            <asp:ListItem Value="8">Emk</asp:ListItem>
            <asp:ListItem Value="8">Tar</asp:ListItem>
            <asp:ListItem Value="8">San</asp:ListItem>
            <asp:ListItem Value="8">Mas</asp:ListItem>
        </asp:DropDownList>
        <br />
        <asp:DropDownList ID="DropDownList2" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
            <asp:ListItem Value="7">Emk</asp:ListItem>
            <asp:ListItem Value="7">Tar</asp:ListItem>
            <asp:ListItem Value="7">San</asp:ListItem>
            <asp:ListItem Value="7">Mas</asp:ListItem>
        </asp:DropDownList>
        <br />
        <asp:DropDownList ID="DropDownList3" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
            <asp:ListItem Value="6">Emk</asp:ListItem>
            <asp:ListItem Value="6">Tar</asp:ListItem>
            <asp:ListItem Value="6">San</asp:ListItem>
            <asp:ListItem Value="6">Mas</asp:ListItem>
        </asp:DropDownList>
        <br />
        <asp:DropDownList ID="DropDownList4" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
            <asp:ListItem Value="6">Emk</asp:ListItem>
            <asp:ListItem Value="6">Tar</asp:ListItem>
            <asp:ListItem Value="6">San</asp:ListItem>
            <asp:ListItem Value="6">Mas</asp:ListItem>
        </asp:DropDownList>
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        <br />
        <br />
        <asp:GridView ID="GridView1" runat="server">
        </asp:GridView>
    </form>

以及后面的代码:

protected void Button1_Click(object sender, EventArgs e)
        {

            DataTable dt;
            string conStr = ConfigurationManager.ConnectionStrings["cConnectionString"].ConnectionString;
            using (var sqlCon = new SqlConnection(conStr))
            {
                sqlCon.Open();
                using (var scCommand = new SqlCommand("Cstored", sqlCon))
                {
                    scCommand.CommandType = CommandType.StoredProcedure;
                    scCommand.Parameters.Add("@Tar", SqlDbType.Int).Value = DropDownList1.SelectedValue;
                    scCommand.Parameters.Add("@Emk", SqlDbType.Int).Value = DropDownList2.SelectedValue;
                    scCommand.Parameters.Add("@Mas", SqlDbType.Int).Value = DropDownList3.SelectedValue;
                    scCommand.Parameters.Add("@San", SqlDbType.Int).Value = DropDownList4.SelectedValue;
                    using (SqlDataAdapter sda = new SqlDataAdapter(scCommand))
                    {
                        dt = new DataTable();
                        sda.Fill(dt);
                        GridView1.DataSource = dt;
                        GridView1.DataBind();
                    }
                }
            }

这些代码有效,但由于这部分

,因此总是有相同的结果
  

scCommand.Parameters.Add(&#34; @ Tar&#34;,SqlDbType.Int).Value =   DropDownList1.SelectedValue;

例如在DP1中有几个选项,值为8,如果用户选择任何内容,它将在存储过程中与'@Tar'相乘,对于其他DP,它是相同的,因为它的结果是即使选择不同,我也希望如果用户在'Emk'中选择DP1,则值8仅与存储过程中的'@Emk'相乘,如果在{{1}中选择'Mas'它与DP 2相乘。 但我不知道如何在代码中定义它,您的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

更改您的存储过程,如下所示

DECLARE @dp1 varchar (100)
DECLARE @dp2 varchar (100)
DECLARE @dp3 varchar (100)
DECLARE @dp4 varchar (100)

DECLARE @dpp1 int
DECLARE @dpp2 int
DECLARE @dpp3 int
DECLARE @dpp4 int


set @dp1 = 'Emk' >>as example
set @dp2 = 'Mas' >>as example 



if (@dp1= 'Emk')
Begin
set @dpp1= 8 
Select Emk*@dpp1 as val1 FROM Cdetail
End

if (@dp1= 'Tar')
Begin
set @dpp1= 8
Select Tar*@dpp1 as val1 FROM Cdetail
End

if (@dp1= 'San')
Begin
set @dpp1= 8 
Select San*@dpp1 as val1 FROM Cdetail
End

if (@dp1= 'Mas')
Begin
set @dpp1= 8
Select Mas*@dpp1 as val1 FROM Cdetail
End

if (@dp2= 'Emk')
Begin
set @dpp2= 7 
Select Emk*@dpp2 as val2 FROM Cdetail
End

if (@dp2= 'Tar')
Begin
set @dpp2= 7 
Select Tar*@dpp2 as val2 FROM Cdetail
End

if (@dp2= 'San')
Begin
set @dpp2= 7 
Select San*@dpp2 as val2 FROM Cdetail
End

if (@dp2= 'Mas')
Begin
set @dpp2= 7 
Select Mas*@dpp2 as val1 FROM Cdetail
End


SELECT 
Namecar,
(Mas*@dpp1)+(San*@dpp1)+(Tar*@dpp1)+(Emk*@dpp1)+(Mas*@dpp2)+(San*@dpp2)+(Tar*@dpp2)+(Emk*@dpp2)
 as finalresult
FROM Cdetail

请注意,这是一个例子,您需要改进它