C# 比较c中的字符串null或空#

C# 比较c中的字符串null或空#,c#,mysql,C#,Mysql,在我的MySQL数据库表中,我有一个字段Check 字段检查中存储的值可以是:null或-1 当字段检查中存储的值为null或-1时,我需要返回xxx值。我试过: string Check = sdr["Check"] == DBNull.Value || sdr["Check"] == "-1,00" ? "xxx" : sdr["Check"].ToString(); 没有成功,因为输出总是-1,00 如何解决这个问题 请帮帮我,非常感谢您。问题是您比较的对象不对。从System.Data

在我的MySQL数据库表中,我有一个字段
Check

字段
检查
中存储的值可以是:
null
-1

当字段
检查
中存储的值为
null
-1
时,我需要返回
xxx
值。我试过:

string Check = sdr["Check"] == DBNull.Value || sdr["Check"] == "-1,00" ? "xxx" : sdr["Check"].ToString();
没有成功,因为输出总是
-1,00

如何解决这个问题


请帮帮我,非常感谢您。

问题是您比较的对象不对。从
System.Data
结果集返回的值是围绕实际值的包装。你想要的是打字版本。基本上,检查应如下所示:

int checkIndex = sdr.GetOrdinal("Check");
string Check = sdr.IsDBNull(checkIndex) || (sdr.GetString(checkIndex) == "-1,00") ? "xxx" : sdr.GetString(checkIndex);
 int checkIndex = sdr.GetOrdinal("Check");
 string Check = "xxx";
 double checkValue = sdr.IsDBNull(checkIndex) ? -1 : Convert.ToDouble(sdr[checkIndex]);

 if (checkValue != -1)
 {
     Check = checkValue.ToString(CultureInfo.CurrentCulture);
 }
如果您的“Check”实际上是一个数字,您可能希望使用
IntValue(“Check”)
调用,以处理全球化问题,前提是您的应用程序部署在使用“.”而不是“.”作为小数点的地方

有关完整的API,请参阅


如果您的MySQL数据库没有设置为使用与C#应用程序相同的语言环境格式,那么您对数字格式的假设可能是错误的。为了使您的支票更为可靠,我建议如下:

int checkIndex = sdr.GetOrdinal("Check");
string Check = sdr.IsDBNull(checkIndex) || (sdr.GetString(checkIndex) == "-1,00") ? "xxx" : sdr.GetString(checkIndex);
 int checkIndex = sdr.GetOrdinal("Check");
 string Check = "xxx";
 double checkValue = sdr.IsDBNull(checkIndex) ? -1 : Convert.ToDouble(sdr[checkIndex]);

 if (checkValue != -1)
 {
     Check = checkValue.ToString(CultureInfo.CurrentCulture);
 }

您可以通过下面的代码比较空字符串或空字符串

string str = Your string
if(String.IsNullOrEmpty(str))
{
    if yes, it comes here
}
else
{
    if not, it comes here
}

String.IsNullOrEmpty()
是一种
bool
类型。

如果数据类型是decimal 10,2则需要
转换。ToDecimal
值:

 string Check = (sdr["Check"] == DBNull.Value || Convert.ToDecimal(sdr["Check"]) == -1) ? "xxx" : sdr["Check"].ToString();

“输出为-1,00”。你是说
sdr[“Check”].ToString()
总是-1,00吗?是的
sdr[“Check”].ToString()
总是-1,00如果不检查
.value
但使用
sdr[“Check”]==DBNull
sdr[“Check”]则是DBNull
,使用括号并覆盖整个三元条件语句。它写的方式,意思是“
sdr[“Check”]==DBNull.Value | |(sdr[“Check”]==“-1,00”?“xxx”:sdr[“Check”])
”说,我相信你应该有
(sdr[“Check”]==DBNull.Value | | sdr[“Check”=“-1,00”)?“xxx”:sdr[“Check”].ToString()
代替谢谢,我尝试了你的建议,但输出没有变化。我始终使用-1,00CS1061:'System.Data.Odbc.OdbcDataReader'不包含'IsDbNull'的定义,并且找不到接受'System.Data.Odbc.OdbcDataReader'类型的第一个参数的扩展方法'IsDbNull'(是否缺少using指令或程序集引用?)问题:您是否查看了
sdr.GetString(“Check”)
的返回值?如果它实际上是一个数字字段,那么MySQL可以将其格式化为“-1.00”或简单的“-1”。我将发布一个附录来处理这个问题。在MySQL中,调试中的is-1是-1.00该列的SQL数据类型是什么?不幸的是,这并不能回答问题。如果我错了,请更正,您正在SQL DB数据读取器中检查字符串是否为null或为空。OP实际上正在处理一个可能是
字符串的
对象,SQL DB数据读取器不返回字符串。它是一个对象,可以是DBNull(它本身就是一个对象),也可以是其他特定于数据库的表示形式。IsNullOrEmpty()仅比较字符串或C#
null
。这两个你都没有描述过如何得到。