C# 比较c中的字符串null或空#
在我的MySQL数据库表中,我有一个字段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
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
。这两个你都没有描述过如何得到。