【问题标题】:Procedure or function has too many arguments specified in ASP.NET C#过程或函数在 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 的名称

标签: c# sql asp.net sql-server-2008


【解决方案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; ?
猜你喜欢
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 2023-03-26
  • 2014-02-08
相关资源
最近更新 更多