我真的很沮丧这个错误所有功能代码都是正确但仍然给我错误,我试图从SQL Server数据库中选择信息。
存储过程:
WITH CTE AS(
SELECT [key1], [key2], [key3], [date],
RN = ROW_NUMBER() OVER (PARTITION BY [key1], [key2], [key3] ORDER BY [date] desc),
mxD = max([date]) OVER (PARTITION BY [key1], [key2], [key3])
FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1 and mxD is not null
C#代码:
2)在表单按钮上单击事件
create procedure sp_select_companydetails
@id varchar(5)
as
begin
select company_name, company_address
from CompanyDetails
end
在课堂上
string id = "1";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_select_companydetails";
cmd.Parameters.Add("@id", id);
FillDataset();
当我点击表单按钮时出现此错误:
过程或函数sp_select_companydetails指定了太多参数。
建议我很好的解决方案
提前谢谢
答案 0 :(得分:0)
不是使用全局SqlCommand,而是在每次需要时将其创建为新的。当您处理一次性物品时,这是一种推荐的方法
using (SqlConnection con = new SqlConnection(GetConnectionString())
using (SqlCommand myCmd = new SqlCommand("sp_select_companydetails", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = "1";
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
return ds;
}
顺便说一句,我们看不到你是如何创建SqlConnection的,但似乎你有另一个一维对象保持在全局级别。这对于SqlConnection来说特别讨厌,因为该对象在客户端和服务器上都保持对系统范围资源的引用。不要创建全局连接对象,只需创建一个全局方法,该方法返回当前连接字符串,以用于创建本地SqlConnection(上例中的GetConnectionString()
)。如果您认为这是性能杀手,我建议您阅读the concept of connection pooling