过程或函数sp_select_companydetails指定了太多参数

时间:2016-08-29 07:06:50

标签: c# sql-server-2008 c#-4.0 c#-3.0 c#-2.0

我真的很沮丧这个错误所有功能代码都是正确但仍然给我错误,我试图从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指定了太多参数。

建议我很好的解决方案

提前谢谢

1 个答案:

答案 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