过程或函数在 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("@DocumentID",SqlDbType.Int32).Value=documentID; ?以上是关于过程或函数在 ASP.NET C# 中指定的参数过多的主要内容,如果未能解决你的问题,请参考以下文章
将文件x中指定的函数作为命令行参数传递给python中的文件y的最佳方法
为啥我的 Solidity 构造函数需要两个未在参数中指定的变量?