您的位置:首页 > 其它

关于字符串为空的判断条件

2015-07-28 14:24 141 查看
第一篇随笔,正好今天解决了一个问题,立马记录下,希望是好习惯的开始。

问题描述:读取一个记录SQL查询语句的XML文档,生成SQL查询字符串。

XML文档如下所示:

<?xml version="1.0" encoding="utf-8"?>
<SubQuery>
<DBName>SQLServer</DBName>
<Select>*</Select>
<From>t_product</From>
<Where>ID=1</Where>
<Order>
</Order>
<Group>
</Group>
</SubQuery


希望得到的字符串结果为:select * from t_product where ID=1

先贴下我一开始编写的代码:

public string XmlToSQL(XmlDocument doc)
{
string str_select, str_from, str_where, str_order, str_group;
str_select = null;
str_from = null;
str_where = null;
str_order = null;
str_group = null;
XmlNode node_select, node_from, node_where, node_order, node_group;
XmlNode root = doc.DocumentElement;
node_select = root.SelectSingleNode("Select");
str_select = node_select.InnerText;
node_from = root.SelectSingleNode("From");
str_from = node_from.InnerText;
node_where = root.SelectSingleNode("Where");
str_where = node_where.InnerText;
node_order = root.SelectSingleNode("Order");
str_order = node_order.InnerText;
node_group = root.SelectSingleNode("Group");
str_group = node_group.InnerText;
string str = "select " + str_select + " from " + str_from;
if (str_where.Length !=null )
{
str += " " + " where " + str_where;
}
if (str_order.Length !=null)
{
str += " " + " order by "+str_order;
}
if (str_group.Length !=null)
{
str += " " + " group by " +str_group;
}
return str;
}


运行结果为:select * from t_product where ID=1 order by group by

不是预期结果。

当时思考str_order和str_group两个字符串的结果应该为null,不清楚哪里出错。

然后编写测试程序,测试发现,这两个字符串结果不为null。

字符串为空,但不为null。这个点,我之前一直都是理解错误了。

然后想到通过测试字符串的长度作为判断条件。

于是修改代码如下:

public string XmlToSQL(XmlDocument doc)
{
string str_select, str_from, str_where, str_order, str_group;
str_select = null;
str_from = null;
str_where = null;
str_order = null;
str_group = null;
XmlNode node_select, node_from, node_where, node_order, node_group;
XmlNode root = doc.DocumentElement;
node_select = root.SelectSingleNode("Select");
str_select = node_select.InnerText;
node_from = root.SelectSingleNode("From");
str_from = node_from.InnerText;
node_where = root.SelectSingleNode("Where");
str_where = node_where.InnerText;
node_order = root.SelectSingleNode("Order");
str_order = node_order.InnerText;
node_group = root.SelectSingleNode("Group");
str_group = node_group.InnerText;
string str = "select " + str_select + " from " + str_from;
if (str_where.Length >0 )
{
str += " " + " where " + str_where;
}
if (str_order.Length > 0)
{
str += " " + " order by "+str_order;
}
if (str_group.Length > 0)
{
str += " " + " group by " +str_group;
}
return str;
}


结果正确。

可以看出,改动幅度很小。

实现了具体目标,但并不清楚自己所用方法是否为最佳。

欢迎讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: