1

decimal(7,4)SQL Serverにデータ型のデータベース列があります。アプリケーションのビジネス層を作成しています。私のメソッドを使用するすべてのユーザーが正しい形式でパラメーターを渡す必要があることを確認したい: decimal(7,4).

ユーザーが入力パラメーターを渡してメソッドdecimal(7,4)を呼び出したときに、精度とスケールが確実になるようにする最善の方法は何ですか?

注: hereに記載されている 10 進数の書式設定は探していません。

注: メソッドのパラメーターが気になります。データベースに値を渡すことではありません。

4

2 に答える 2

0

以下のようにする

SqlParameter parameter = new SqlParameter("@YourParameterName", SqlDbType.Decimal);
parameter.Precision = 7;
parameter.Scale = 4;
parameter.Value = yourParameterValue;
cmd.Parameters.Add(parameter);
于 2013-07-27T07:12:05.350 に答える
-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
于 2013-07-27T07:22:27.330 に答える