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

本文关键字:null 返回 代码 值参 参数 问题 何处理 处理 存储过程 | 更新日期: 2023-09-27 18:31:54

>我有一个应用程序,它从存储过程中获取成绩名称和传递参数。 除了我的成绩表中没有成绩名称的情况外,这有效。我是否需要修改参数以使其接受 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# 代码:

var sql = @"dbo.sp_mark_test @GradeName OUT,
                             @GradePass OUT";
SqlParameter[] parameters = new SqlParameter[] {             
   new SqlParameter("@GradeName", SqlDbType.NVarChar) { Direction = ParameterDirection.Output,Size = 10 },
   new SqlParameter("@GradePass", SqlDbType.Bit) { Direction = ParameterDirection.Output }            
};
await db.Database.ExecuteSqlCommandAsync(sql, parameters);
var GradeName = (string)parameters[1].Value;
var GradePass = (Boolean)parameters[2].Value;

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

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

cmd.Parameters.AddWithValue("@closeDate", DBNull.Value);

或将其用于比较。

DBNull 类上的 MSDN 页面。下面的代码片段如下:

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