2017-04-06 82 views
0

我尝试使用符号||代表或。然而,当我在我的程序试了一下它仍然显示我的错误讯息,我实际上把它放在一个消息框,并显示给用户,让他们知道他们键入错误,但是,即使我键入正确的它仍然显示我的信息。以下是我的代码。希望会有人能够帮助我。数据库编程数据验证

private void SaveChanges() 

{ 

//declare variable for store code integer    
int storeCode = 0; 


//check if first and last name are empty 

if (txtName.Text == "") 

     { 

      MessageBox.Show("Fill in First Name", "Missing Data"); 
      txtName.Focus(); 
     } 
     else if(txtLastname.Text == "") 
     { 
      MessageBox.Show("Fill in Last Name", "Missing Data"); 
      txtLastname.Focus(); 
     } 
     else if(txtJobCode.Text == "" || txtJobCode.Text != "SEC" || txtJobCode.Text != "MGR" && 
      txtJobCode.Text != "GEN") 
     { 
      MessageBox.Show("Fill in Job Code with SEC, MGR or GEN", "Missing Data"); 
      txtJobCode.Focus(); 
     } 
     else if(int.TryParse(txtStoreCode.Text, out storeCode) || txtStoreCode.Text == "") 
     { 
      if (storeCode <= 1 && storeCode >= 5) 
      { 
       MessageBox.Show("Fill in Store Code 1-5", "Missing Data"); 
       txtStoreCode.Focus(); 
      } 

      MessageBox.Show("Fill in Store Code", "Missing Data"); 
      txtStoreCode.Focus(); 
     } 
     else 
     { 
      this.eMPLOYEEBindingSource.EndEdit(); 
      this.tableAdapterManager.UpdateAll(this.empDataSet); 
     } 
    }//end SaveChanges 
+0

你提到的“正确”值是什么?什么是“那个信息”?并[在调试器中执行代码](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –

回答

1

我假设你得到错误信息在该行

else if(txtJobCode.Text == "" || txtJobCode.Text != "SEC" || txtJobCode.Text != "MGR" && 
      txtJobCode.Text != "GEN") 
     { 
      MessageBox.Show("Fill in Job Code with SEC, MGR or GEN", "Missing Data"); 
      txtJobCode.Focus(); 
     } 

原因是这将永远不会评估为“假”,并跳过声明,再加上你有一个& &为GEN。只要你成功地遇到任何第一个||陈述你将会失败& &。它不可能是那些和GEN之一。比方说,你把GEN英寸

== “”(假)!= “SEC”(真)热潮! (短路错误消息)

比方说,你把SEC

== “”(假)!= “SEC”(假)!= “MGR”(真)热潮! (短路到错误信息)

运营商||代码会继续检查UNTIL它找到一个真正价值。当它从那个时候返回,不看得更远。因此它读取if(true)..因此它执行if语句。

随着运营商& &的会继续检查UNTIL它找到一个。当它确实返回虚假,并没有进一步看。因此它读取if(false)...并且不执行if语句。

现在当然如果没有||声明是真实的,它将返回false,如果没有,则返回true。& &值为false将返回true。

你需要写这个我相信:

IF了jobCode == “” OR(=了jobCode SEC和了jobCode = MGR及了jobCode = GEN!!)然后ShowMessage()

现在类型SEC

==“”(false)|| (!= SEC(false)) - 结果为false ...好!没有信息。

现在键入GEN

== “”(假)|| (!= SEC(true)& &!= MGR(true)& &!= GEN(false)) - result false ...好!没有信息。

现在键入“”

==“”(true)...好!我们收到一条消息。

现在尝试HELLO

== “”(假)|| (!= SEC(true)& &!= MGR(true)& &!= GEN(true))...好!我们收到一条消息。

我还想补充一下,如果语句和多个操作符和/或操作符(尽管有时不能完全避免)不是最干净的方法,因为即使是自己查看它,也花了我一些时间来排序通过它。如果可能的话,我会重新编写逻辑以便更好地使用,甚至可以根据需要将不同的测试置于自己的方法中,并测试方法本身是否成功。任何事情都可以使读取和调试更加轻松。

为了简化它,使用这行代码,由于您有三个常量,只需检查它是否与其中任何一个相等。

你也有范围检查倒退永远不会是真的。它不能是< = 1和> = 5.

这是应该工作的清理;我会这样做的方式。 (没有经过测试,只是在现场划伤)即使你不想使用它,也许你可以更容易地阅读它,并看到错误。更易于阅读使得调试和管理变得更加容易,因此希望我可以通过一种以上的方式提供帮助。

public void SaveChanges() 
    { 
     var isValid = validateFirstName() 
        && validateLastName() 
        && validateJobCode() 
        && validateStoreCode(); 

     if (isValid) 
     { 
      this.eMPLOYEEBindingSource.EndEdit(); 
      this.tableAdapterManager.UpdateAll(this.empDataSet); 
     } 
    } 

    private bool validateFirstName() 
    { 
     var isValidFirstName = !string.IsNullOrEmpty(txtName.Text); 

     if (!isValidFirstName) 
     { 
      MessageBox.Show("Fill in First Name", "Missing Data"); 
      txtName.Focus(); 
     } 

     return isValidFirstName; 
    } 

    private bool validateLastName() 
    { 
     var isValidLastName = !string.IsNullOrEmpty(txtLastname.Text); 

     if (!isValidLastName) 
     { 
      MessageBox.Show("Fill in Last Name", "Missing Data"); 
      txtLastname.Focus(); 
     } 

     return isValidLastName; 
    } 

    private bool validateJobCode() 
    { 
     var isValidJobeCode = txtJobCode.Text == "SEC" 
          || txtJobCode.Text == "MGR" 
          || txtJobCode.Text == "GEN"; 

     if (!isValidJobeCode) 
     { 
      MessageBox.Show("Fill in Job Code with SEC, MGR or GEN", "Missing Data"); 
      txtJobCode.Focus(); 
     } 

     return isValidJobeCode; 
    } 

    private bool validateStoreCode() 
    { 
     var storeCode = 0; 
     var isValidStoreCode = int.TryParse(txtStoreCode.Text, out storeCode) 
           && storeCode >= 1 
           && storeCode <= 5; 

     if (!isValidStoreCode) 
     { 
      MessageBox.Show("Fill in Store Code 1-5", "Missing Data"); 
      txtStoreCode.Focus(); 
     } 

     return isValidStoreCode; 
    } 
} 
+1

非常感谢! –