我有一个存储过程如下:(并且有一个表包含一些列,包括'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
相乘。
但我不知道如何在代码中定义它,您的帮助将不胜感激。
答案 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
请注意,这是一个例子,您需要改进它