我该如何处理空值参数的从存储过程返回的C#代码? [英] How can I deal with the return of a null value parameter from a stored procedure to C# code?

查看:190
本文介绍了我该如何处理空值参数的从存储过程返回的C#代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有得到一个等级名称和参数传递从存储过程的应用程序。这个工程除了那里是我的等级表上没有名字级的情况下。我是否需要修改参数,以使他们接受空和/或我需要,我分配这些参数到C#参数修改的地方,所以我可以把它接受一个值或空?



我有这个存储过程。它已经缩短这个问题:

  CREATE PROCEDURE sp_mark_test 
@GradeName NVARCHAR(10)输出,
@GradePass位输出
AS
BEGIN
- 举例而已,真正的代码并在99
不硬编码选择顶层1 @GradeName = Grade.Name,@GradePass =等级。通过
FROM AdminTest
其中TestId = 99

下面是我的C#代码:

  VAR SQL = @dbo.sp_mark_test @GradeName OUT,
@GradePass OUT;
的SqlParameter [] =参数新的SqlParameter [] {
新的SqlParameter(@ GradeName,SqlDbType.NVarChar){方向= ParameterDirection.Output,大小= 10}
新的SqlParameter( @GradePass,SqlDbType.Bit){方向= ParameterDirection.Output}
};

等待db.Database.ExecuteSqlCommandAsync(SQL参数);
VAR GradeName =(字符串)参数[1] .value的;
VAR GradePass =(布尔)参数[2] .value的;


解决方案

按照要求,而这仅仅是一个快速的答案,考虑使用的DBNull

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

或将其用于比较。



MSDN页面上的 DBNull类。从它的代码片断如下:(!DBNull.Value.Equals(行[字段名]))

 如果
返回(字符串)行[字段名] +;
,否则
返回的String.Empty;


I have an application that gets a grade name and pass parameter from a stored procedure. This works except for the case where there is no grade name in my grade table. Do I need to modify the parameters to make them accept null and/or do I need to modify the place where I assign those parameters to the C# parameters so I can make it accept a value or null?

I have this stored procedure. It's been shortened for this question:

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

Here is my C# code:

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;

解决方案

As requested, and this is just a quick answer, look into the use of DBNull such as

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

or use it for comparisons.

MSDN Page on the DBNull class. A code snippet from it is below:

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

这篇关于我该如何处理空值参数的从存储过程返回的C#代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆