[英]How to detect when there is no value from database SQL LINQ C#
我在检测 C# 代码中的值是否为空时遇到问题(我正在使用 LINQ 从 SQL SERVER 调用存储过程),我的意思是当我想确定 SQL 是否在之后向我返回了某些内容时遇到了问题我调用了 SP,它期望有一个参数 (ArticleID) 或实际 SQL 没有返回任何内容(空行不存在)。
事实上,我想检查我的任何文章是否有一些“子文章”,并且我正在将 ArticleID 从 C# 代码传递到存储过程。
因此,如果文章在那里,我想用它做一些事情,如果通过的文章 ID 的文章不存在,我也想做一些事情,所以正如我所说,我需要检测我的 sql 中是否存在给定文章 ID 的文章数据库。
这是我的一些代码:
private void btnCheckForArticle(object sender, RoutedEventArgs e)
{
try
{
if (gridArticles.SelectedItems.Count > 0) {
Article a = (Article)gridArticles.SelectedItem;
if (a.ArticleID != null)
{
var existingArticle = DataServices.POS.proc_GetSubArticleByArticleID(a.ArticleID);
if (existingArticle != null)
{
//DO SOMETHING
return;
}
}
}
}
}
我的存储过程:
ALTER PROCEDURE [dbo].[proc_GetSubArticleByArticleID]
(
@ArticleID int
)
AS
BEGIN
Select *
From SubArticles as S
Where S.ArticleID = @ArticleID
END
有趣的是,我不知道如何在 c# 代码中检测我的值是否为空,因为即使 sql 数据库中没有行,我仍然没有得到空值,并且因为在existingArticle != null
下方的代码existingArticle != null
会总是执行..
现在我将发布文章中发生的事情,该文章肯定没有任何子文章,我的意思是,结果应该是 null 100% !
我传递给过程的 ID 是 2351,所以我执行了应该直接在 sql 上返回值的 sp,我用 2351 替换了 @ArticleID,当然它没有返回任何结果,但是我怎么能注意到在我的 C# 代码中..
因为existingArticle
永远不会为空,因为它总是有一些值,并且低于我的if (existingArticle != null)
将始终执行。 我真的不想要:/ ...
谢谢你们! 干杯
你为什么不调用 FirstOrDefault()
var existingArticle = DataServices.POS.proc_GetSubArticleByArticleID(a.ArticleID).FirstOrDefault();
if (existingArticle != null)
{
//
return;
}
有一种特殊的数据类型用于检查数据库中的空值。
DBNull.Value
在你的情况下:
if (existingArticle != DBNull.Value)
{
//DO SOMETHING
return;
}
首先,将您的 SP 修改为在BEGIN
之后:
SET NOCOUNT ON
这是为了避免干扰“xx 行受影响”消息。
第二,不要做SELECT *
,而是使用
SELECT 1 From SubArticles as S
Where S.ArticleID = @ArticleID
最后,检查System.DBNull.Value
而不是 NULL,因为这是将从 DDBB 返回的内容。 这是因为在 .Net 值类型中,布尔值不能为空
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.