2013-07-27 6 views
1

J'ai une colonne de base de données de type de données decimal(7,4) dans SQL Server. Je crée une couche de gestion pour une application. Je veux m'assurer que tous les utilisateurs qui utilisent ma méthode transmettent les paramètres au bon format: decimal(7,4).Vérification du type de données du paramètre d'entrée

Quelle est la meilleure façon de garantir que la précision et l'échelle seront decimal(7,4) lorsque les utilisateurs appellent ma méthode en passant le paramètre d'entrée?

Remarque: Je ne cherche pas de formatage décimal, qui est mentionné here.

Remarque: Je suis préoccupé par le paramètre de méthode; pas de passer la valeur à la base de données.

Répondre

0

faire comme ci-dessous

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

Je suis préoccupé par le paramètre de la méthode; pas de passer la valeur à la base de données. – Lijo

-1

Vous pouvez définir le paramètre comme sql_variant puis utiliser SQL_VARIANT_PROPERTY pour affirmer qui a été utilisé le type de paramètre correct:

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 
Questions connexes