【发布时间】:2022-01-17 00:34:30
【问题描述】:
我正在尝试通过包含我从数据库中获取的国家名称的列表框将值发送到存储过程。如果我选择一个选项代码 100% 100% 有效。但如果我输入 2 或 3 个选项,我会收到以下错误:
多次提供参数“@stIdCity”。
第 322 行:da.Fill(ds);
完整代码:
protected void lstBoxTestCity_SelectedIndexChanged(object sender, EventArgs e)
{
string str = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(str))
{
using (SqlCommand cmd = new SqlCommand("Tprocedure", con))
{
cmd.CommandType = CommandType.StoredProcedure;
foreach (ListItem item in lstBoxTestCity.Items)
{
if (item.Selected)
{
cmd.Parameters.AddWithValue("@stIdCity", item.Value);
}
}
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
gvProducts.DataSource = ds;
gvProducts.DataBind();
}
}
}
存储过程:
CREATE PROCEDURE Tprocedure
(@stIdCity NVARCHAR(20) = NULL, )
AS
BEGIN
SELECT *
FROM employees
INNER JOIN TCity ON employees.IdstICity = TCity.IdstICity
WHERE (employees.IdstICity IN (SELECT ITEM
FROM dbo.SplitString(@stIdCity, ','))
OR ISNULL(@stIdCity, '') = '')
END
列表图片:
请帮忙解决问题。
对不起,如果问题重复了,但我找不到解决办法。
【问题讨论】:
-
@HansKesting 你好,谢谢你的回复,如果我可以分享一些代码,我该怎么做。抱歉,我不是这样做的专家
-
我强烈建议您将此过程转换为使用表值参数,或者至少使用 JSON 或 XML
-
你好/谢谢你的建议/你能分享一些@Charlieface的链接示例
-
试试这个stackoverflow.com/a/66067309/14868997,虽然网上有很多教程。
标签: c# asp.net sql-server