如何在C#

时间:2017-03-05 12:30:14

标签: c# asp.net sql-server stored-procedures

我有一张桌子:

enter image description here

并乘以最终结果如下:

enter image description here

一个过程被定义为以下乘法:(必须将下拉列表的值乘以数据库中的值,然后将它们水平相加并在最终结果中显示为resault。

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网页中创建了一些下拉列表,以便按用户选择值:

<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,依此类推),然后设置变量,然后乘以相关的数据库中的值。 然后在finalresult中从上到下显示gridview的值。

我尝试使用以下代码,但它不起作用,我不知道如何将下拉值发送到商店程序并根据选择提供每个项目。

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();

我想,如果用户在下拉菜单1中选择Emk,则8数字乘以(X)到表格中所有Emk的值,如果用户选择Tar in dropdow 2,7数字乘以(X)到表格中所有Tar的值。

1 个答案:

答案 0 :(得分: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#代码中,执行以下操作:

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);
        }
    }
}