Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中如何将下拉列表的值传递给sqlserver中的存储过程_C#_Asp.net_Sql Server_Stored Procedures - Fatal编程技术网

C# 在C中如何将下拉列表的值传递给sqlserver中的存储过程

C# 在C中如何将下拉列表的值传递给sqlserver中的存储过程,c#,asp.net,sql-server,stored-procedures,C#,Asp.net,Sql Server,Stored Procedures,我有一张桌子: 并乘以最终结果,如下所示: 一个过程定义如下:必须将下拉列表中的值与数据库中的值相乘,然后水平求和,并在最终结果中显示result 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

我有一张桌子:

并乘以最终结果,如下所示:

一个过程定义如下:必须将下拉列表中的值与数据库中的值相乘,然后水平求和,并在最终结果中显示result

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
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();
它是用于数据库的,但我在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>
这意味着在下拉列表1中选择的值必须发送到具有数字8、数字2、数字7等的存储过程,并设置变量,然后与数据库中的相关值相乘。 然后在gridview中从上到下显示finalresult的值

我尝试使用以下代码,但它不起作用,我不知道如何将下拉列表的值发送到存储过程,并根据选择为每个项目提供信息

SET @Em = 8
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();

我想,如果用户在dropdow 1中选择Emk,则表中所有Emk的值乘以8,如果用户在dropdow 2中选择Tar,则表中所有Tar的值乘以7。

声明参数,而不是在存储过程中声明变量:

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

它不工作,StoredProcess中有错误,下拉列表DropDownList 1没有默认值。SelectedValue=8;以及“sda.Filldt;”中的其他内容我收到此错误,无法将参数值从字符串转换为Int32,而且,我找不到默认下拉列表值DropDownList1的定义。SelectedValue=8;DropDownList2.SelectedValue=7;DropDownList3.SelectedValue=6;DropDownList4.SelectedValue=5;dropdownlist的值是字符串@Em、@Ta等。您需要将它们更改为数字。另外,IIRC,ASP.DropDownList的SelectedValue属性是string类型,因此您需要强制转换为int。我这样做了,但结果总是一样的!!我想如果用户在下拉列表中选择'Em',它只与数据库中的'Em'值相乘,如果用户在下拉列表中选择'Ta',则值与数据库中的'Ta'值相乘,而不是全部,那么您需要一个不同的过程。