我有以下存储过程:
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);
我的意图是,如果examId或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行。如果examId或testTopicId的值为0,谁能告诉我如何在这些列中插入null?
答案 0 :(得分:2)
使用DbNull.Value
或SqlInt32.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));