2017-05-03 3 views
1

Ich möchte fragen. Wie kann ich eine Nachricht anzeigen, wenn der in das Textfeld eingegebene Wert in der MSSQL-Datenbank nicht verfügbar ist? Ich möchte, dass Benutzer entweder den Wert, den sie eingeben, in der Datenbank angeben oder nicht. Hier ist meine aktuelle Codierung:Nachricht anzeigen, wenn Wert nicht verfügbar ist

private void textBoxEmplNo_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      if (textBoxEmplNo.Text != "") 
      { 

       //Do something 
       textBoxWorkNo.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString(); 
       textBoxName.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); 


       string selectSql = "select icnum, passport, deptno, section from m_employee where [email protected]"; 
       SqlCommand cmd = new SqlCommand(selectSql, con); 
       cmd.Parameters.AddWithValue("@empno", textBoxEmplNo.Text); 

       try 
       { 
        con.Open(); 

        using (SqlDataReader read = cmd.ExecuteReader()) 
        { 
         while (read.Read()) 
         { 
          textBoxICPass.Text = (read["icnum"].ToString()); 
          textBoxPassport.Text = (read["passport"].ToString()); 
          textBoxDept.Text = (read["deptno"].ToString()); 
          textBoxSection.Text = (read["section"].ToString()); 


         } 
        } 
       } 
       finally 
       { 
        con.Close(); 
       } 

      } 

      else 
      { 
       textBoxWorkNo.Text = ""; 
       textBoxName.Text = ""; 
      } 

      dataGridView1.Visible = false; 
     } 
    } 

Antwort

2

Ich denke, eine boolesche Variable wird Ihnen helfen, die Probleme zu lösen. Wenn dies der Fall wird der modifizierte try-Block, dass die Arbeit tun:

bool isDataFound = false; 
try 
{ 
    con.Open(); 
    using (SqlDataReader read = cmd.ExecuteReader()) 
    { 
     while (read.Read()) 
     { 
      isDataFound = true; 
      // populate the text boxes here 
     } 
    } 
    if(!isDataFound) 
    { 
     // Display message here that no values found 
     lblError.Text ="No Data Found"; 
    } 
} 

So funktioniert es: Wir haben eine boolean Variable als false initialisiert, und wir ändern sie auf true, wenn While-Schleifen. Dann überprüfen wir diese Variable, um festzustellen, ob sie ausgeführt wird oder nicht. wenn nicht, wird die Nachricht wie erforderlich angezeigt;

Es gibt eine schreibgeschützte Eigenschaft HasRows der SqlDataReader Klasse kann auch für die gleiche verwendet werden. In diesem Fall müssen Sie keine zusätzliche boolesche Variable verwenden. Die Eigenschaft HasRows ist wahr, wenn der Leser mindestens eine Zeile hat. also kannst du das auch benutzen. Folgendes ist der Code dafür

try 
{ 
    con.Open(); 
    using (SqlDataReader read = cmd.ExecuteReader()) 
    { 
     if(!read.HasRows) 
     { 
      // Display message here that no values found 
      lblError.Text ="No Data Found"; 
     } 
     else 
     { 
      while (read.Read()) 
      { 
       // populate the text boxes here 
      } 

     } 
    } 
} 
+0

Dank! Es funktioniert! Vielen Dank! – Miza

+0

@Miza: Freut mich zu hören. Gerne, dir zu helfen! Sie können es als akzeptiert markieren, wenn es wirklich hilft –

0

versuchen Sie dies;

wenn Sie Reihe read.HasRows haben kehren Sie

   using (SqlDataReader read = cmd.ExecuteReader()) 
       { 
        if (read.HasRows) 
        { 
         while (read.Read()) 
         { 
          textBoxICPass.Text = (read["icnum"].ToString()); 
          textBoxPassport.Text = (read["passport"].ToString()); 
          textBoxDept.Text = (read["deptno"].ToString()); 
          textBoxSection.Text = (read["section"].ToString()); 


         } 
        } 
        else 
        { 
         lblError.Text = "No Data Found"; 
        } 
       } 
      } 
0

Im Anschluss an die anderen Antworten wahr, Sie boolean verwenden können, wenn der Lese kehrt Wert ist oder nicht, und dann öffnet sich ein Meldungsfeld alarmieren, um den Benutzer zu überprüfen Dieser Datensatz wurde nicht gefunden.

Zum Beispiel:

using (SqlDataReader read = cmd.ExecuteReader()) 
       { 
        if (read.read()) 
        { 
         //display values as you did before 
        } 
        else 
        { 
         //if using winform include System.Windows.Forms and use 
         // something like the following, 
         var result = MessageBox.Show(message, caption, 
           MessageBoxButtons.YesNo, 
           MessageBoxIcon.Question); 

         //depending on the result either cancel the request of prompt 
         // user for another try. 

         //If using wpf 

        // Include Windows.message.messagebox and use the message 
        // box class in a similar fashion as above. Check usage if 
        // you are not familiar with it. 
        } 
       } 
      } 
Verwandte Themen