确保输入参数的数据类型

时间:2013-07-27 06:39:58

标签: c# .net

我在SQL Server中有一个数据类型为decimal(7,4)的数据库列。我正在为应用程序创建业务层。希望确保使用我的方法的所有用户都应以正确的格式传递参数:decimal(7,4)

当用户通过传递输入参数调用方法时,确保精度和比例为decimal(7,4)的最佳方法是什么?

注意:我不是在寻找格式化十进制,提到here

注意:我关注方法参数;而不是将值传递给数据库。

2 个答案:

答案 0 :(得分:0)

执行以下操作

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

答案 1 :(得分:-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