我正在使用 Charles Nurse 在他的博客 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() 方法不起作用,并且出现类似“预期参数@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;