我有一个SQL Server 2008存储过程,当通过下面显示的代码调用时,会返回@BatchID
参数的缺少参数异常。
正如您所看到的,我使用
传递参数cmd.Parameters.AddWithValue("@BatchID", batchID)
但出于某种原因,它在拨打服务器时没有拿起它。
这里可能缺少一些简单的东西,这是漫长的一天。
存储过程
ALTER PROCEDURE [dbo].[spIsEngineSixCylinderByBatchID]
@BatchID as int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @IsSixCylinder as bit
SET @IsSixCylinder = 0
SELECT @IsSixCylinder = tblBatches.SixCylinder
FROM tblBatches
WHERE IdBatch = @BatchID
SELECT @IsSixCylinder
END
代码
Private Function IsBatchSixCylinder(batchID As Int32) As Boolean
Dim isSixCylinder As Boolean = False
Try
Using cmd As New SqlClient.SqlCommand("[dbo].[spIsEngineSixCylinderByBatchID]", _conn)
cmd.Parameters.AddWithValue("@BatchID", batchID)
isSixCylinder = cmd.ExecuteScalar
End Using
Catch ex As SqlClient.SqlException
LogError(ex.Message)
End Try
Return isSixCylinder
End Function
异常
过程或函数'spIsEngineSixCylinderByBatchID'需要参数'@BatchID',这是未提供的。
调用堆栈
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`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)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteScalar()
at ClassLib_SAPtoEPMS.clsSAPtoEPMS.IsBatchSixCylinder(Int32 batchID) in C:\Users\phil.murray\Desktop\EPMS_05022012\EPMS_05022012\Power Systems EPMS\ClassLib_SAPtoEPMS\ClassLib_SAPtoEPMS\clsSAPtoEPMS.vb:line 229
答案 0 :(得分:2)
您可以尝试下面代码段中的代码是否有效吗?
Using cmd As New SqlClient.SqlCommand("spIsEngineSixCylinderByBatchID", _conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@BatchID", batchID)
isSixCylinder = cmd.ExecuteScalar
End Using
或
Using cmd As New SqlClient.SqlCommand("spIsEngineSixCylinderByBatchID", _conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@BatchID ", SqlDbType.Int)
cmd.Parameters("@BatchID ").Value = batchID
End Using
答案 1 :(得分:0)
使用此
Private Function IsBatchSixCylinder(batchID As Int32) As Boolean
Dim isSixCylinder As Boolean = False
Try
Using cmd As New SqlClient.SqlCommand("[dbo].[spIsEngineSixCylinderByBatchID]", _conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@BatchID", batchID)
isSixCylinder = cmd.ExecuteScalar
End Using
Catch ex As SqlClient.SqlException
LogError(ex.Message)
End Try
Return isSixCylinder
End Function