我已获得以下代码:
// Here is where we will read in all our values and populate the form with them
lblBenCatX.Text = Convert.ToString(reader["Category"]);
lblBenProvX.Text = Convert.ToString(reader["Provision"]);
txtCommentBox.Text = Convert.ToString(reader["Feedback"]);
ddlDefect1.SelectedValue = Convert.ToString(reader["Network"]);
ddlIssue1.SelectedValue = Convert.ToString(reader["Issue_ID"]);
ddlResolution1.SelectedValue = Convert.ToString(reader["Resolution_ID"]);
ddlDefect2.SelectedValue = Convert.ToString(reader["Network2"]);
ddlIssue2.SelectedValue = Convert.ToString(reader["Issue_ID2"]);
ddlResolution2.SelectedValue = Convert.ToString(reader["Resolution_ID2"]);
前3行代码;没问题。但是,如果我有一个具有NULL值的记录,则下拉列表会破坏代码。所以,我认为我需要先检查字段以确保它不是NULL。类似的东西:
if (!Convert.ToString(reader["Network"]) = NULL)
{
ddlDefect1.SelectedValue = Convert.ToString(reader["Network"]);
}
但是,这给了我一个错误:
作业的左侧必须是变量,属性或 索引
有什么想法吗?这是VS2015中带有Oracle后端的C#,如果有任何重要的话。
答案 0 :(得分:2)
在C#中,你需要在一行==
中使用两个等号来进行相等比较,而不是一个。一个等号=
是一个赋值运算符。
if (first == second) { ... }
但是,在你的情况下,你会想要使用" not equals" !=
运营商:
if (Convert.ToString(reader["Network"]) != null)
这比这更清洁,更有效:
if (!(Convert.ToString(reader["Network"]) == null))
请注意,我已将整个内部比较包裹在一些内容中,因此整个陈述被否定了;否则,它会认为您正在尝试说!Convert.ToString(reader["Network"])
,并且正如您在此处的评论中指出的那样,您不能将!
与字符串一起使用。
话虽如此,如果您要转换为字符串,那么最好使用string.IsNullOrEmpty()
进行检查:
if (!string.IsNullOrEmpty(reader["Network"].ToString())))
但最好的方法是检查列值是否为空,而不是将其转换为字符串:
if (!reader.IsDBNull(["Network"]))
答案 1 :(得分:0)
=
是一个赋值运算符,在设置值时使用。
==
是一个等于运算符,用于确定某些内容是否等于其他内容。
!=
也是一个等式运算符,与上面的运算符相反。所以,当某些东西 等于其他东西时。
实际上,在这种情况下你应该使用!=
:
if (Convert.ToString(reader["Network"]) != null)
{
ddlDefect1.SelectedValue = Convert.ToString(reader["Network"]);
}
答案 2 :(得分:0)
你有几个选择。第一个是检查值DBNull
是否与空字符串/空值不同。
if (!reader.IsDBNull([ordinalPositionOfNetworkInSelectStatement]))
ddlDefect1.SelectedValue = Convert.ToString(reader["Network"]);
见IDataReader.IsDBNull。唯一的问题是你需要知道你正在检查的列的序号位置。
另一种方法是在sql select语句中检查dbnull,如果是,则使用函数返回空字符串。这种方法的积极方面是您不必担心在c#代码中检查null
,但我不确定它是否在您的oracle查询或视图中有任何负面影响。您可以使用COALESCE
。
SELECT Category, Provision, Feedback, COALESCE(Network, '') AS Network /*other columns*/
FROM ... -- rest of the query
免责声明 - 我的oracle语法缺乏,但COALESCE确实作为一个函数存在