2017-06-13 88 views
0

我是C#编程语言的新手。我有问题如何检查图像是否存在或不在数据库中?我正在使用数据库内部连接。我目前的代码是工作。但是,如果图像不存在于数据库中,则所有文本框都不会从数据库获取值。我不想那样。我想这样>如果图像不存在,即使图像不存在,所有的文本框都从数据库中获得了它们的值。请有人帮助我。这里是我的代码:检查数据库中是否存在图像C#windows窗体

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

        string selectSql = "select a.name, a.empno, a.workno, a.icnum, a.passport, a.deptno, a.section, a.designation, b.path from m_employee a inner join m_emp_photo b on b.empno=a.empno where a.empno= @empno"; 

        SqlCommand cmd = new SqlCommand(selectSql, con); 

        cmd.Parameters.AddWithValue("@empno", textBoxEmplNo.Text); 

        bool isDataFound = false; 

        try 
        { 

         con.Open(); 

         using (SqlDataReader read = cmd.ExecuteReader()) 
         { 
          while (read.Read()) 
          { 
           isDataFound = true; 

           textBoxWorkNo.Text = (read["workno"].ToString()); 
           textBoxName.Text = (read["name"].ToString()); 
           textBoxICPass.Text = (read["icnum"].ToString()); 
           textBoxPassport.Text = (read["passport"].ToString()); 
           textBoxDept.Text = (read["deptno"].ToString()); 
           textBoxSection.Text = (read["section"].ToString()); 
           textBoxDesignation.Text = (read["designation"].ToString()); 

           pictureBox1.Visible = true; 
           pictureBox1.Image = Image.FromFile("" + read["path"].ToString()); 

           dataGridView1.Visible = false; 
          } 
         } 

         if (!isDataFound) 
         { 
          textBoxEmplNo.Text = ""; 
          textBoxWorkNo.Text = ""; 
          textBoxName.Text = ""; 

          // Display message here that no values found 
          MessageBox.Show("No Result Found"); 

         } 
        } 
        finally 
        { 


         con.Close(); 
        } 

       } 

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

        dataGridView1.Visible = false; 

      } 
     } 
+1

您想显示来自'm_employee'的员工数据,而不管照片表中的数据是否正确?为此,只需使用“左连接”。 –

+0

@CoderofCode嗨,我已经试过了。但是如果图像没有在数据库中,它仍然会显示消息“No Result Found”。我希望员工数据仍然显示在所有文本框中,即使图像不存在于数据库中。你能用代码解释更多细节吗?因为我在编程方面还是新手。 :( – Miza

+0

我已经为此写了答案,请查看 –

回答

0

从我的理解,你想,不论目前不在数据库中他的照片中显示的员工数据,以便做表的left join使您的查询如下变化,

select a.name, a.empno, a.workno, a.icnum, a.passport, a.deptno, a.section, a.designation, b.path 
from 
    m_employee a left join m_emp_photo b 
    on b.empno=a.empno 
where 
    a.empno= @empno 

这将为您提供左侧表中给定员工编号的所有记录,如果右侧表格中没有可用的值NULL,则从右侧进行匹配。

尽管您需要在代码中处理b.PathNULL值。

所以在这个代码的代码行之前,

pictureBox1.Image = Image.FromFile("" + read["path"].ToString()); 

检查,如果pathDBNULL或不与System.DBNull.Value比较。