我将参数传递给存储过程:
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
的身份进入数据库?
答案 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);
如果Result
为null
,则省略该参数并使用默认值。