簡體   English   中英

如何在C#中將下拉列表的值傳遞給sqlserver中的存儲過程

[英]How to pass value of drop down list to stored procedure in sqlserver in C#

我有一張桌子:

在此處輸入圖片說明

並乘以最終結果,如下所示:

在此處輸入圖片說明

一個過程的定義如下:(必須將下拉列表的值與數據庫中的值相乘,然后對它們進行水平求和,並在最終結果中顯示結果。

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,依此類推)的存儲過程中,並設置變量,然后將其乘以數據庫中的相關值。 和這個節目值之后finalresultgridview從上往下。

我嘗試使用下面的代碼,但是它不起作用,我不知道如何發送下拉列表的值來存儲過程並根據選擇輸入每個項目。

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的值,如果用戶選擇在下拉菜單2中的Tar ,則將7號乘以(X)到表中所有的Tar的值。

而不是在存儲過程中聲明變量,而是聲明參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM