如何为dbtype decimal传递空值?

时间:2011-12-26 07:50:32

标签: c# sql sql-server

我将参数传递给存储过程:

param = CreateInParameter("Result", DbType.Decimal);
param.Value = testresults.Result;
cmd.Parameters.Add(param);

有时testresults.Result将为空

如何将其作为NULL传递?

这是我的存储过程:

USE [SalesDWH]
GO
/****** Object:  StoredProcedure [dbo].[Insert_TestResults]    Script Date: 12/25/2011 23:49:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Insert_TestResults]
    -- Add the parameters for the stored procedure here

    @TestName varchar (500),
    @Result decimal (18,4)=null,
    @NonNumericResult varchar (50)=null, 
    @QuickLabDumpid int

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

INSERT INTO [SalesDWH].[dbo].[TestResults]
           ([TestName]
           ,[Result]
           ,nonnumericresult
           ,[QuickLabDumpid])
     VALUES
           (@TestName,@Result,@nonnumericresult,@QuickLabDumpID)


END

如果没有为testresults.Result分配值,则只将其作为0.如何允许它以NULL的身份进入数据库?

4 个答案:

答案 0 :(得分:7)

试试这个:

param.Value = testresults.Result==0?DBNull.Value:(object)testresults.Result;

答案 1 :(得分:3)

使用param.Value = DBNull.Value;将数据库中的值设置为NULL。

答案 2 :(得分:0)

由于您已使用默认值null定义了@Result参数,因此如果您不传递此参数,则它将为null。 if(testresults.Result>0) {param = CreateInParameter("Result", DbType.Decimal); param.Value = testresults.Result; cmd.Parameters.Add(param); }

答案 3 :(得分:0)

让存储过程将参数默认为null(如您所做),然后:

cmd.Parameters.AddWithValue("@Result", testresults.Result);

如果Resultnull,则省略该参数并使用默认值。