首页 > 解决方案 > 过程或函数指定了太多参数但仍可正常运行

问题描述

我有一个执行 SQL Server 存储过程的表适配器。代码都是通过 Visual Studio 中的 DataSet Designer 生成的。

当我运行查询时,我的日志记录中出现以下错误。

System.Data.SqlClient.SqlException (0x80131904):过程或函数 uspUpdateSite 指定了太多参数。

在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,操作1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource1 完成,Int32 超时,任务和任务,布尔和 usedCache,布尔 asyncWrite,布尔 inRetry)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteScalar()
at Database.DataSets.DataSetTableAdapters.QueriesTableAdapter.uspUpdateSite(Nullable 1 SiteNo, String SiteName, String EmailAddress, Nullable1 Installed, String AreaManager, String SiteID, Nullable 1 GoLiveDate, Nullable1 Screens1, Nullable 1 Screens2, Nullable1 Screens3, Nullable 1 Screens4, Nullable1 Screens5, String Comments, String IPAddress, String Postcode, Nullable 1 Latitude, Nullable1 Longitude)

这似乎没有意义,因为比较查询参数(由 DataSet 设计器生成)和 SQL Server 存储过程中的实际参数,我看不出有什么问题。

然后我运行 SQL Server Profiler 来查看实际发送到 SQL Server 的内容。同样,参数匹配。

所以我从分析器复制并粘贴了查询并单独运行它。查询在 SQL Server Management Studio 中运行良好。

我已经查看了这里的其他帖子,但似乎都与我的不同,并且不依赖 DataSet Designer 来生成代码。

我的执行代码很简单

try
{
   using (QueriesTableAdapter daKSRS = new QueriesTableAdapter())
   {
      daKSRS.uspUpdateSite(SiteNo, SiteName, emailAddress, installed, areaManager, siteID, goLiveDate, screens1,screens2, screens3, screens4, screens5, comments, ipAddress, postcode, latitude, longitude);
   }
}
catch(Exception ex)
{
   FileLogger.LogError(ex);
}

尽管出现错误,我还检查了数据库并应用了更改。

因此,如果一切正常并且存储过程已执行并且一切正常,为什么我会在日志中看到错误?

更新:我不能提供存储过程代码,因为它是机密的,但我至少可以提供参数。

创建过程 [dbo].[uspUpdateSite] (@SiteNo smallint, @SiteName varchar(50) = NULL, @EmailAddress nvarchar(512) = NULL, @Installed smallint = NULL, @AreaManager nvarchar(32) = NULL, @SiteID nvarchar (7) = NULL,@GoLiveDate smalldatetime,@Screens1 smallint = NULL,@Screens2 smallint = NULL,@Screens3 smallint = NULL,@Screens4 smallint = NULL,@Screens5 smallint = NULL,@Comments nvarchar(1024) = NULL,@ IPAddress nvarchar(32) = NULL,@Postcode nvarchar(8) = NULL,@Latitude 浮点 = NULL,@Longitude 浮点 = NULL)

标签: c#sql-serverdataset

解决方案


推荐阅读