如何处理从存储过程向C#代码返回空值参数的问题?

如何处理从存储过程向C#代码返回空值参数的问题?,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我有一个应用程序,它从存储过程中获取等级名称和pass参数。除了在“我的成绩表”中没有成绩名称的情况外,这是有效的。我是否需要修改参数以使其接受null和/或我是否需要修改将这些参数分配给C#参数的位置,以便使其接受值或null 我有这个存储过程。这个问题缩短了: CREATE PROCEDURE sp_mark_test @GradeName NVARCHAR(10) OUTPUT, @GradePass BIT OUTPUT AS BEGIN -- Exam

我有一个应用程序,它从存储过程中获取等级名称和pass参数。除了在“我的成绩表”中没有成绩名称的情况外,这是有效的。我是否需要修改参数以使其接受null和/或我是否需要修改将这些参数分配给C#参数的位置,以便使其接受值或null

我有这个存储过程。这个问题缩短了:

CREATE PROCEDURE sp_mark_test
    @GradeName    NVARCHAR(10) OUTPUT,
    @GradePass    BIT OUTPUT
AS
BEGIN
   -- Example only, real code does not hard code in 99
   SELECT top 1 @GradeName = Grade.Name, @GradePass = Grade.Pass
                FROM        AdminTest
                WHERE       TestId = 99 
END
这是我的C#代码:


根据要求,这只是一个简单的答案,请查看
DBNull
的用法,例如

cmd.Parameters.AddWithValue("@closeDate", DBNull.Value);
或者将其用于比较

上的MSDN页。下面是其中的代码片段:

if (! DBNull.Value.Equals(row[fieldName])) 
    return (string) row[fieldName] + " ";    
else
    return String.Empty;

查看
DBNull.Value
@Drew-非常感谢。如果您认为这是我需要的,您可以添加一个问题的答案,这样其他人也可以看到如何执行此操作,这样我就可以标记为已回答。旁注:您不应该在存储过程中使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!马克,如果你能找到合适的替身,我完全赞成。
if (! DBNull.Value.Equals(row[fieldName])) 
    return (string) row[fieldName] + " ";    
else
    return String.Empty;