Servicestack.OrmLite の新しい API では、fx をストアド プロシージャとして呼び出すときは、次のように SqlScalar または SqlList を使用する必要があります。
List<Poco> results = db.SqlList<Poco>("EXEC GetAnalyticsForWeek 1");
List<Poco> results = db.SqlList<Poco>("EXEC GetAnalyticsForWeek @weekNo", new { weekNo = 1 });
List<int> results = db.SqlList<int>("EXEC GetTotalsForWeek 1");
List<int> results = db.SqlList<int>("EXEC GetTotalsForWeek @weekNo", new { weekNo = 1 });
ただし、名前付きパラメーターは機能しません。SP のパラメータの順序を尊重する必要があります。CommandType.StoredProcedure ではなく CommandType=CommandType.Text を使用して SP が実行され、パラメータが dbCmd.Parameters.Add() として追加されるためだと思います。CommandType が Text であるため、名前付けを無視するため、Parameters.Add() としてではなく、SQL クエリ文字列にパラメーターが追加されることを期待しているようです。例:
CREATE PROCEDURE [dbo].[sproc_WS_SelectScanFeedScanRecords]
@JobNo int = 0
,@SyncStatus int = -1
AS
BEGIN
SET NOCOUNT ON;
SELECT
FSR.ScanId
, FSR.JobNo
, FSR.BatchNo
, FSR.BagNo
, FSR.ScanType
, FSR.ScanDate
, FSR.ScanTime
, FSR.ScanStatus
, FSR.SyncStatus
, FSR.JobId
FROM dbo.SCAN_FeedScanRecords FSR
WHERE ((FSR.JobNo = @JobNo) OR (@JobNo = 0) OR (ISNULL(@JobNo,1) = 1))
AND ((FSR.SyncStatus = @SyncStatus) OR (@SyncStatus = -1) OR (ISNULL(@SyncStatus,-1) = -1))
END
この SP を次のように呼び出す場合:
db.SqlList<ScanRecord>("EXEC sproc_WS_SelectScanFeedScanRecords @SyncStatus",new {SyncStatus = 1});
名前付きパラメーターを無視し、SP で定義されている順序で追加するため、SyncStatus=1 ではなく JobNo = 1 のすべてのレコードが返されます。次のように呼び出す必要があります。
db.SqlList<ScanRecord>("EXEC sproc_WS_SelectScanFeedScanRecords @SyncStatus=1");
これは予想される動作ですか?信頼できない場合、匿名型パラメーターを無効にすると思います
ティア
ボー