C# 当使用条件语句的字段为空时,如何不从数据库中获取空字符串或值?

C# 当使用条件语句的字段为空时,如何不从数据库中获取空字符串或值?,c#,C#,这里需要推一下。求你了 我创建了一个简单的问候语,使用用户名和姓氏向用户问好: 但是,我添加了一个if语句,这样,如果数据库表没有名称,那么名称是可选的,那么我只想显示一个问候语,但不显示名称: 所以,如果用户在db中有名称,问候语将是:早上好Penda Bear:如果名称为空,则简单地说是晚上好 然而,我在问候语中仍然得到空值。我可以在存储过程中过滤这些数据,但即使没有名称,我也需要这些数据 注意:LoadProfile方法简单地加载数据集 代码草稿: 结果是这样的:早上好 对于C语言来说是新

这里需要推一下。求你了

我创建了一个简单的问候语,使用用户名和姓氏向用户问好: 但是,我添加了一个if语句,这样,如果数据库表没有名称,那么名称是可选的,那么我只想显示一个问候语,但不显示名称:

所以,如果用户在db中有名称,问候语将是:早上好Penda Bear:如果名称为空,则简单地说是晚上好

然而,我在问候语中仍然得到空值。我可以在存储过程中过滤这些数据,但即使没有名称,我也需要这些数据

注意:LoadProfile方法简单地加载数据集

代码草稿:

结果是这样的:早上好

对于C语言来说是新手,甚至在使用IsNullOrEmpty时也会感到困惑。 我知道,因为它只是一个字符串值,但我如何去掉它?

将扩展方法用作:

或者是一种稍微高级一点的方法,它可以使您的条件逻辑变得平坦:

return string.Format("Good {0}{1}{2} {3}"
                     , intHourOfDay < 12 ? "morning" : "evening"
                     , string.IsNullOrEmpty(userFirstName) ? "!" : " "
                     , userFirstName
                     , userLastName
                     );

根据常量System.DBNull.Value测试您的值。如果值等于System.DBNull.Value,则将变量的值设置为string.empty

此外,您还有一个错误,即您使用的是按位and,而不是逻辑and&。

如果您在userLastName或userFirstName上获取空字符串文字字符串,则可能在数据库中存储错误。如果LoadProfile.Tables[0].Rows[0][FirstName]为DBNull,则ToString应返回空字符串string.empty,而不是文本空字符串

根据for DBNull.ToString:

返回一个空字符串。空

无效的 这并不适用,请看下面乔伊的评论

关于你的第二个问题:

对于C语言来说是新手,甚至在使用IsNullOrEmpty时也会感到困惑。我知道,因为它只是一个字符串值,但我如何摆脱它呢

您的和操作员没有按您的要求执行操作。您正在if中执行按位and运算。您需要一个比较/逻辑and,它在c中为&&


即使您通过检查DBNull.Value来解决问题,您使用的方法在实际应用程序中也不起作用。你应该考虑使用一个或多个微型ORM库来避免重复的ADO.NET管道,这总是会导致一些bug。

嗯,这是错误的,因为它不做他想做的事情。当然,操作员本身没有错:-。我已经改写了这个句子。引用:»对于布尔操作数,»计算其操作数的逻辑AND;也就是说,当且仅当它的两个操作数都为真时,结果才为真。«–那里根本没有按位计算的内容。实际上,您确实是对的。。。我来自C/C++语言,那里的布尔值实际上是整数,我没有看到C语言的这种差异。我已经将答案中的这一部分标记为无效。谢谢大家,我对逐位的内容感到非常困惑,因为我读了很多书,表明我所做的实际上是正确的短路并计算两个语句??而且,我检查了数据库,当我手动输入null进行测试时,我输入了一个错误的值。但如果输入错误,我的insert方法设置为输入DBNull.Value。因此,解决方案或解释是首先检查值是否为DBNull,而不是设置为空??这里的问题是,您从数据库获取的值不是DBNull,而是获取一个包含单词NULL的文本字符串,所以实际上有一个人的名字和姓氏叫做null,所以程序的结果是正确的。如果您得到的是null值,而不是包含null一词的字符串,那么结果应该是正确的。@Tim,&&而不是&根本不会改变该代码段的语义。它不是带bools的按位运算符。或/M Micro-ORM libary的声音让人想喝一杯:
var row =LoadProfile().Tables[0].Rows[0];

string? firstName = row.Field<string?>( "FirstName" );
string? lastName= row.Field<string?>( "LastName" );

if ((System.DateTime.Now.Hour < 12) && (!string.IsNullOrEmpty(lastName)))
{
     return "Good Morning " + firstName + " " + lastName;
}
else
{
      return "Good Morning";
}
return string.Format("Good {0}{1}{2} {3}"
                     , intHourOfDay < 12 ? "morning" : "evening"
                     , string.IsNullOrEmpty(userFirstName) ? "!" : " "
                     , userFirstName
                     , userLastName
                     );
if ((intHourOfDay < 12) && (!string.IsNullOrEmpty(userLastName)))
var row =LoadProfile().Tables[0].Rows[0];

string? firstName = row.Field<string?>( "FirstName" );
string? lastName= row.Field<string?>( "LastName" );

if ((System.DateTime.Now.Hour < 12) && (!string.IsNullOrEmpty(lastName)))
{
     return "Good Morning " + firstName + " " + lastName;
}
else
{
      return "Good Morning";
}