Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# If条件仅验证第一条语句_C#_Sql - Fatal编程技术网

C# If条件仅验证第一条语句

C# If条件仅验证第一条语句,c#,sql,C#,Sql,我正在尝试将用户添加到我的数据库表中。以下是“添加”按钮的方法: if (userDG.CurrentRow.Cells[4].Value.Equals(null) && userDG.CurrentRow.Cells[3].Value.Equals(null)) MessageBox.Show("Please select a function for the user"); if (userDG.CurrentRow.Cells[3].Value.Equa

我正在尝试将用户添加到我的数据库表中。以下是“添加”按钮的方法:

if (userDG.CurrentRow.Cells[4].Value.Equals(null) && 
    userDG.CurrentRow.Cells[3].Value.Equals(null))
    MessageBox.Show("Please select a function for the user");

if (userDG.CurrentRow.Cells[3].Value.Equals(true) && 
    userDG.CurrentRow.Cells[4].Value.Equals(true))
    MessageBox.Show("Choose either programmer or tester for a user");
else
    userTableAdapter1.Update(database1DataSet1.User);
第二个
if
else
工作正常。第一个if仅验证第一条语句。对于上面的代码,它将在不显示消息的情况下添加用户。我也尝试过:

if (!(userDG.CurrentRow.Cells[3].Value.Equals(true)) && 
    !(userDG.CurrentRow.Cells[4].Value.Equals(true)))
例如:

  • 第一列:
    isprogrammer
    (布尔值)
  • 第二个:
    istester
    (布尔值)
如果未选中
isprogrammer
,并且选中了
istester
,则会显示消息,这是错误的,因为并非两者都未选中

如果我选中
isprogrammer
并将
istester
保留为未选中状态,它将添加用户,这是很好的

额外信息:这两列的类型为
Boolean
。第一个
if
用于验证是否都未选中,以及是否显示了相应的消息


在我的例子中:即使两者都未选中,它也会添加用户。

您可能打算这样做:

if (userDG.CurrentRow.Cells[4].Value.Equals(false) && userDG.CurrentRow.Cells[3].Value.Equals(false))
  MessageBox.Show("Please select a function for the user");
else if (userDG.CurrentRow.Cells[3].Value.Equals(true) && userDG.CurrentRow.Cells[4].Value.Equals(true))
  MessageBox.Show("Choose either programmer or tester for a user");
else
  userTableAdapter1.Update(database1DataSet1.User);

如果
单元格[3].Value
单元格[4].Value
都等于
false
您的代码仍将输入
else
案例并更新用户。这可能不是您想要做的。

中的
&
表达式的第一部分被证明为false时,如果
,程序已经知道
&
表达式也将为false,因此不需要检查第二部分。这称为“短路”


尝试使用一个
&
而不是两个,然后始终计算表达式的两侧。

请告诉我们确切的值是什么(您调试过吗?)。您是否仔细检查了代码以确保发生了这种情况?如果布尔and语句的第一部分计算为false,则第二部分短路(因为这句话不可能是真的)。如果两个复选框都未选中,用户是否会得到更新?如果是,您应该在问题中提及。感谢您的更新。您发布的代码是完整的代码还是省略了任何行?如果是,请在
if-else if
中的代码块周围添加大括号以解决您的问题。在任何情况下,这都是很好的做法这样做。虽然将
if
更改为
else if
可能是一种好的做法,但我认为这不会解决他的问题。第一个
if
语句没有按照op预期的方式工作。不,您看到这里有很大的不同。如果两个值都是
false
,则将运行
else
案例,这可能是cause的问题。虽然对OP来说,原因似乎是
if语句的短路。但我可能是错的。虽然我同意这可能修复了一个bug,但我不认为这与dsanatomy所问的是同一个问题。尽管很难判断,因为问题的措辞相当复杂unclear@SaniHuttunen我有以前尝试过,但没有解决我的问题。@dsanalogy:那么到底是什么问题?不显示第一个
MessageBox
?第二个
MessageBox
?不更新用户?这不会有什么区别,因为第一个
if
中的操作数不应该有任何副作用。这只适用于第一个操作并且计算为false。因为它需要计算为true才能执行消息框,所以第二个操作数仍然会被计算。“短路”在这里不适用。“因为它计算为true[…]”“你怎么知道这一点?@Rik谢谢,这是行得通的。第二个@Eric的评论。而我一开始也认为问题是关于如何避免条件语句中的短路,在清理问题之后,OP似乎遇到了其他问题。(将
&&
更改为
&
“解决”了这个问题,这让我感到困惑;我冒险猜测,这是一个转移视线的问题,同时也是一个变化(例如,勾选然后取消勾选框可能导致单元格从
NULL
变为
false
)实际上解决了问题。)