c# - 过程或函数指定了太多参数但仍可正常运行
问题描述
我有一个执行 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, TaskCompletionSource
1 完成,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(Nullable1 SiteNo, String SiteName, String EmailAddress, Nullable
1 Installed, String AreaManager, String SiteID, Nullable1 GoLiveDate, Nullable
1 Screens1, Nullable1 Screens2, Nullable
1 Screens3, Nullable1 Screens4, Nullable
1 Screens5, String Comments, String IPAddress, String Postcode, Nullable1 Latitude, Nullable
1 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)
解决方案
推荐阅读
- hyperlink - Hyperlink to particular Text in a cell on the same sheet
- django - When running my docker image for my Django project I'm getting a "ModuleNotFoundError: No module named 'try_django'" error
- saml - OneLogin 不传回 SAML RelayState
- pine-script - 无法在我的策略中弹出 TradingView 警报
- javascript - svg 将文本大纲合并为一个完整的大纲
- button - 将继续购物按钮添加到 woocommerce 购物车页面,更新购物车左侧
- c++ - 由于我在某些时候使标志易变,因此标志的值应该改变。但它只在 t 线程上无限等待
- html - 图像的 Ruby 样式无法正确调整图片大小
- ada - 我如何总结 3 个最高的浮点数,而不是 txt 文件中的所有浮点数?
- jenkins - 如何将 jenkins.currentBuild.result 显示为“SUCCESS”而不是“null”