3

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
4

2 に答える 2

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
于 2013-04-25T09:56:26.803 に答える
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
于 2013-04-25T09:57:45.957 に答える