如何使用SqlParameter将空值发送到存储过程?

时间:2014-07-19 15:33:34

标签: sql-server stored-procedures

我有以下存储过程:

CREATE PROCEDURE dbo.sp_ins_test
   @Title          NVARCHAR (100) ,
   @ExamId         INT            ,
   @TopicId        INT                           
AS 
BEGIN
INSERT INTO dbo.Test
(
    TestId,
    ExamId,
    TopicId
)
VALUES (
    @TestId,
    @ExamId,
    @TopicId
) 

这是调用存储过程的代码:

List<SqlParameter> parameterList = new List<SqlParameter>();
parameterList.Add(new SqlParameter ("@Title", "Practice " + testNumber));
parameterList.Add(new SqlParameter ("@ExamId", examId == 0 ? null : examId));
parameterList.Add(new SqlParameter ("@TopicId",  testTopicId == 0 ? null : testTopicId));
SqlParameter[] parameters = parameterList.ToArray();
int result = db.Database.ExecuteSqlCommand(sql, parameters);

我的意图是,如果exam​​Id或topicId为0,那么我想将null传递给 sp_ins_test存储过程。但是我得到一个错误说:

Error   2
Type of conditional expression cannot be determined because there is no implicit 
conversion between '<null>' and 'int'   

用于examId和testTopicId行。如果exam​​Id或testTopicId的值为0,谁能告诉我如何在这些列中插入null?

2 个答案:

答案 0 :(得分:2)

使用DbNull.ValueSqlInt32.Null

答案 1 :(得分:2)

指定SqlType Null以传递NULL:

        parameterList.Add(new SqlParameter("@ExamId", examId == 0 ? SqlInt32.Null : examId));
        parameterList.Add(new SqlParameter("@TopicId", testTopicId == 0 ? SqlInt32.Null : testTopicId));testTopicId));