我该如何处理空值参数的从存储过程返回的C#代码? [英] How can I deal with the return of a null value parameter from a stored procedure to C# code?
问题描述
我有得到一个等级名称和参数传递从存储过程的应用程序。这个工程除了那里是我的等级表上没有名字级的情况下。我是否需要修改参数,以使他们接受空和/或我需要,我分配这些参数到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屋!