过程或函数在 ASP.NET C# 中指定的参数过多

Posted

技术标签:

【中文标题】过程或函数在 ASP.NET C# 中指定的参数过多【英文标题】:Procedure or function has too many arguments specified in ASP.NET C# 【发布时间】:2017-10-10 17:29:31 【问题描述】:

我在 sql 中有以下存储过程:

CREATE PROCEDURE [dbo].[GetDocumentInfoById]
@DocumentID INT
AS
BEGIN
SET NOCOUNT ON;

SELECT 
   [DocumentID]
  ,[DocumentTitle]
  ,[DocumentVersion]

FROM 
    [dbo].[TblDocuments]
WHERE
    [DocumentID]=@DocumentID


END

这是我的 C# 代码:

 public static DataSets.DocumentsDs GetDocumentInfoById(int documentId)
    
        using (DbCommand loCmd = CreateDatabase.GetStoredProcCommand(GetDocumentInfoById))
        
            using (DataSets.DocumentsDs loDocumentDs = new DataSets.DocumentsDs ())
            

                CreateDatabase.AddInParameter(loCmd, "DocumentID", DbType.Int32, documentId);
                CreateDatabase.LoadDataSet(loCmd, loDocumentDs , loDocumentDs.DocumentDT.TableName);
                return loDocumentDs;
            
        
    

我在sql中试过这个命令:

sp_help  [GetDocumentInfoById]

我得到了回报:

Name: GetDocumentInfoById
Owner: dbo
Type: stored procedure
Parameter Name: @DocumentID 

当我运行我的项目时,我收到此错误:过程或函数“GetDocumentInfoById”有太多参数。

我做错了什么?请指教。谢谢

更新:使用 DbCommad

 public static DataSets.DocumentsDs GetDocumentInfoById(int documentId)
    
        string con = ConfigurationSettings.AppSettings.GetValues("con").GetValue(0).ToString();
        using (SqlConnection con = new SqlConnection(con))
        
            using (SqlCommand cmd = new SqlCommand("GetDocumentInfoById", con))
            
                using (DataSets.DocumentsDs loDocumentDs = new DataSets.DocumentsDs ())
                
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@DocumentID", DbType.Int32, documentId);
                    con.Open();
                    cmd.ExecuteNonQuery();
                    CreateDatabase.LoadDataSet(loCmd, loDocumentDs , loDocumentDs.DocumentDT.TableName);
                    return loDocumentDs;
                
            
        
    

【问题讨论】:

GetStoredProcCommand 是否设置了 CommandType StoredProcedure? @kblok 不,我只是在其中提供了 sp 的名称 【参考方案1】:

参数名称应具有@ 后缀:

这应该是

CreateDatabase.AddInParameter(loCmd, "@DocumentID", DbType.Int32, documentId);

【讨论】:

同样的问题仍然存在 作为一个测试,你可以重写它但使用 DbCommand 吗? 我现在使用 DbCommand 再次尝试了它,但我得到了同样的错误。我在其他一些答案中读到它可能与执行的 sp 版本有关,但由于它显示命令 sp_help 我只有一个 sp 具有该名称,所以我真的不知道这里有什么问题:/ 我刚刚使用 DbCommand 发布了更新。感谢您提供帮助。 @ITDeveloper 另一个测试,你能改变 AddWithValue 为 .Parameters.Add("@Doc​​umentID",SqlDbType.Int32).Value=documentID; ?

以上是关于过程或函数在 ASP.NET C# 中指定的参数过多的主要内容,如果未能解决你的问题,请参考以下文章

c# ASP.NET 核心中的路由

将文件x中指定的函数作为命令行参数传递给python中的文件y的最佳方法

将信息导出到 xlsm 文件,C# VS asp.net

为啥我的 Solidity 构造函数需要两个未在参数中指定的变量?

Asp.net(C#) 获取 执行sql server 语句/存储过程后的 多个返回值?

角度指令可以将参数传递给指令属性中指定的表达式中的函数吗?