asp.net - 将多个参数从 Asp.Net 发送到我在 SQL Server 中的存储过程
问题描述
我在 Asp.Net 中有一个列表框,用户可以从中选择一个或多个参数并将其发送到存储过程。参数数量的选择完全取决于用户,所以我不知道用户要从列表框中选择多少参数。当我单击提交按钮并显示在网格视图上时,我还想使用这些参数从表中检索数据。我遇到的问题是我可以发送一个参数并从我的存储过程中检索数据,但我真的不知道如何将多个参数从列表框发送到我的存储过程。
下面是 Asp.Net 中单个参数的代码
protected void Button_Click(object sender, EventArgs e)
{
string s = "Submit";
SqlCommand cmd = new SqlCommand(s, con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = lbCT.SelectedItem.Value;
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
gvDS.DataSource = ds;
gvDS.DataBind();
con.Close();
}
下面是我在 SQL Server 中的存储过程
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [Submit]
@Name VARCHAR(12)
AS
BEGIN
SELECT *
FROM Employee
WHERE Name = @Name
END
解决方案
您只发送参数并使用等于“=”运算符。取而代之的是,您应该发送所有选定的项目并按分隔符拆分参数。
请按照以下步骤操作:
1.为拆分名称/名称创建一个新的sql函数
CREATE FUNCTION dbo.splitstring (@stringToSplit VARCHAR(MAX))
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(',', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @returnList
SELECT @stringToSplit
RETURN
END
2.更新你的程序
WHERE 名称在(选择 dbo.splitstring (@Names))
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [Submit]
@Names VARCHAR(MAX)
AS
BEGIN
SELECT *
FROM Employee
WHERE Name in (Select dbo.splitstring (@Names))
END
3.更新你的代码隐藏参数
cmd.Parameters.Add("@Names", SqlDbType.VarChar).Value = 使用 ',' 连接所有选定的项目
protected void Button_Click(object sender, EventArgs e)
{
string s = "Submit";
SqlCommand cmd = new SqlCommand(s, con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Names", SqlDbType.VarChar).Value = /*join all selected items with ','*/
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
gvDS.DataSource = ds;
gvDS.DataBind();
con.Close();
}
推荐阅读
- jquery - 多个版本的车把,需要避免它们之间的冲突
- dll - 经典 ASP 错误:Server.CreateObject 失败或找不到入口点 DllRegisterServer
- fortran - 如何找出用于编译 fortran .mod 文件的 gfortran 版本
- intellij-idea - 如果云选项在 Intellij 中不可用,应该怎么做
- java - 证明大哦符号
- mysql - 通过社区版安装程序安装 MySQL 服务器时出错
- vba - 对象需要excel vba?
- html - 容器外的图像
- playframework - 演员记录器未写入日志文件
- python - Tensorflow estimator.DNNClassifier 不重复结果