在数据库C#窗体中检查图像是否存在

时间:2017-06-13 02:19:51

标签: c# visual-studio windows-forms-designer

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

    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 个答案:

答案 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

虽然您需要在代码中处理NULL的{​​{1}}值。

所以在代码行之前的代码中,

b.Path

通过与pictureBox1.Image = Image.FromFile("" + read["path"].ToString()); 进行比较,检查path是否为DBNULL