2013-07-27 3 views
1

У меня есть столбец базы данных типа данных decimal(7,4) в SQL Server. Я создаю бизнес-уровень для приложения. хотите, чтобы все пользователи, потребляющие мой метод, передавали параметры в правильном формате: decimal(7,4).Обеспечение типа входного параметра

Что является лучшим способом обеспечить точность и масштаб decimal(7,4), когда пользователи звонят по моему , передавая входной параметр?

Примечание: Я НЕ ищу форматирование десятичного числа, о котором упоминается here.

Примечание: меня беспокоит параметр метода; а не о передаче значения в базу данных.

ответ

0

делают как ниже

SqlParameter parameter = new SqlParameter("@YourParameterName", SqlDbType.Decimal); 
parameter.Precision = 7; 
parameter.Scale = 4; 
parameter.Value = yourParameterValue; 
cmd.Parameters.Add(parameter); 
+0

Я обеспокоен параметром метода; а не о передаче значения в базу данных. – Lijo

-1

Вы можете определить параметр как sql_variant, а затем использовать SQL_VARIANT_PROPERTY утверждать, что был использован правильный тип параметра:

IF OBJECT_ID('dbo.Decimal74Only') IS NOT NULL DROP PROCEDURE dbo.Decimal74Only; 
GO 
CREATE PROCEDURE dbo.Decimal74Only 
@p1 SQL_VARIANT 
AS 
BEGIN 
    IF(
    SQL_VARIANT_PROPERTY(@p1,'BaseType')<>'decimal' 
    OR 
    SQL_VARIANT_PROPERTY(@p1,'Precision')<>7 
    OR 
    SQL_VARIANT_PROPERTY(@p1,'Scale')<>4 
    ) 
    BEGIN 
    RAISERROR('Wrong Data Type used when calling procedure!',16,10); 
    RETURN -1; 
    END; 
    RAISERROR('Correct Data Type used when calling procedure!',0,0); 
END; 
GO 
RAISERROR('Calling with INT:',0,0); 
DECLARE @i INT = 1; 
EXEC dbo.Decimal74Only @p1 = @i; 
GO 
RAISERROR('Calling with DECIMAL(7,4):',0,0); 
DECLARE @d74 DECIMAL(7,4) = 1; 
EXEC dbo.Decimal74Only @p1 = @d74; 
GO 
Смежные вопросы