У меня есть хранимая процедура следующим образом
create procedure [dbo].[PriceConfirm]
@quote float,
@membershipType int,
@promocode nvarchar(20),
@giftCertificateCode nvarchar(20)
as
if(LEN(@giftCertificateCode)>1)
begin
declare @giftType int
select @giftType = MembershipType from GiftCertificate where GiftCertificateCode=@giftCertificateCode
if @giftType = @membershipType
begin
select 1 as result
end
else
begin
select 0 as result
end
end
else
begin
declare @total float
select @total = Price from MembershipType where TypeID=@membershipType
declare @discount float
select @discount = 0
if(LEN(@promocode)>1)
begin
select @discount = DiscountAmount from Membership_Promo where Promocode=@promocode and MembershipType = @membershipType
end
else
begin
select @discount=0
end
if ABS(@total-@discount-@quote) <.01
begin
select 1 as result
end
else
begin
select 0 as result
end
end
И если я просто выполню хранимую процедуру в SQL Server Management Studio, она будет работать.
exec PriceConfirm @quote=69.99, @membershipType=6, @promocode='1', @giftCertificateCode='1'
Возвращает 1, как и должно быть.
Но в C # при попытке передать параметры @quote, @membershipType, @promocode, @giftCertificateCode с точно такими же значениями я получаю исключение в коде. На нем написано «69,99» вне диапазона.
В моей таблице и в хранимых процедурах у меня есть столбцы с плавающей точкой. Я просто не понимаю, почему передача в C # double дает мне ошибку точности. Кто-нибудь может посоветовать?
Edit:
Вот код C #:
IDataAccess dataAccess = _dataAccessService.GetDataAccess();
IDataConnection connection = _dataAccessService.GetConnection(Connectionstring);
var operation = new DataOperation("PriceConfirm");
operation.Parameters.Add(new DataParameter("@quote", DbType.Double, quote));
operation.Parameters.Add(new DataParameter("@membershipType", DbType.Int32, membership));
operation.Parameters.Add(new DataParameter("@promocode", DbType.String, promocode));
operation.Parameters.Add(new DataParameter("@giftCertificateCode", DbType.String, giftcode));
IResultSet reader = dataAccess.ExecuteResultSet(connection, operation, ResultSetType.Reader);
Считыватель имеет нулевое значение после попытки выполнить операцию. Выдает исключение, говорящее, что «Параметр данных« 69,99 »находится вне диапазона».