チャールズ・ナースがブログhttp://www.charlesnurse.com/Blog/tabid/226/EntryId/69/DAL-2-DataContext-Deep-Dive.aspxで概説し ているように、私は DotNetNuke 7 の DAL2 を使用してい ます。 ExecuteScalar 使用時の予期しないエラー。
ストアド プロシージャが実行され、データベースに挿入されますが、全体的なコード エラーで、「データが存在しない場合に無効な読み取り試行が行われました」というエラーが表示されます。データ リーダーに関連するこのエラーを見たことがありますが、私の場合は DotNetNuke の PetaPoco の統合を使用しています。どんな洞察も大歓迎です。ここにコードがあります
public int AddLocation(string LocationType, string Name, string Description, string Address, string AreaCode, string Telephone, int Capacity, float Long, float Lat)
{
int id;
using (IDataContext db = DataContext.Instance())
{
id = db.ExecuteScalar<int>(CommandType.StoredProcedure,
"CP_AddLocation", LocationType, Name, Description, Address, AreaCode, Telephone, Capacity, Long, Lat);
}
return id;
}
そして私のストアドプロシージャ。単独で動作し、最新の ID を返します。パラメータを出力パラメータ、つまり @LocationId int OUTPUT として宣言すると、addLocation() メソッドが機能せず、この「Expected parameter @LocationId」のようなエラーが発生することに気付き、奇妙に感じたことに言及する必要があります。
CREATE PROCEDURE [dbo].[CP_AddLocation]
@locationType nvarchar(100),
@name nvarchar(100),
@description nvarchar(200),
@address nvarchar(250),
@areaCode nvarchar(50),
@telephone nvarchar(50),
@capacity int,
@long float,
@lat float
AS
DECLARE @geoCode geography
SET @geoCode = geography:: STGeomFromText('POINT (' + CAST(@long AS varchar) + ' ' + CAST(@lat AS varchar) + ')',4326);
BEGIN
INSERT INTO CP_Locations(
LocationType,
Name,
Description,
Address,
AreaCode,
Telephone,
GeoCode,
Capacity,
Long,
Lat)
VALUES(
@locationType,
@name,
@description,
@address,
@areaCode,
@telephone,
@geoCode,
@capacity,
@long,
@lat)
END
declare @locationId int;
select @locationId = SCOPE_IDENTITY()
return @locationId;