Как правильно проверить, является ли ячейка в базе данных нулевой - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть проект посещаемости сотрудников.это моя таблица:

CREATE TABLE [dbo].[tbl_attendanceSheet] 
(
    [Id]           INT          IDENTITY (1, 1) NOT NULL,
    [memberCode]   NVARCHAR(20) NULL,
    [name]         NVARCHAR(20) NULL,
    [date]         NVARCHAR(20) NULL,
    [clockin]      NVARCHAR(20) NULL,
    [clockout]     NVARCHAR(20) NULL,
    [delay]        NVARCHAR(20) NULL,
    [HouresWorked] NVARCHAR(20) NULL,
    [desc]         NVARCHAR (150) NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

Я хочу управлять для сотрудников всякий раз, когда они вводят свой код в текстовое поле, программа записывает их время входа или выхода.

По какой-то причине у меня естьчтобы проверить, являются ли некоторые ячейки нулевыми.

private void textBoxX1_KeyDown(object sender, KeyEventArgs e)
{
    sqlcon.Close();
    sqlcon.Open();

    if (e.KeyCode == Keys.Enter)
    {
        string t = lbl_Time.Text;
        string d = lbl_Date.Text;

        string selectQueryName = "SELECT name FROM tbl_attendanceMembers where memberCode=" + "'" + textBoxX1.Text + "'";
        var sqlcmdName = new SqlCommand(selectQueryName, sqlcon);
        var resultName = sqlcmdName.ExecuteScalar();

        string selectQueryId = "SELECT MAX(id) FROM tbl_attendanceSheet";
        var sqlcmdId = new SqlCommand(selectQueryId, sqlcon);
        var resultId = sqlcmdId.ExecuteScalar();

        (1)if (resultId != null)
        {
            string selectQueryCockin = "SELECT Clockin FROM tbl_attendanceSheet where id=" + "resultId";
            var sqlcmdCockin = new SqlCommand(selectQueryCockin, sqlcon);
            var resultCockin = sqlcmdId.ExecuteScalar();

           (2)if (resultCockin != null)
            {
                (3)if (resultName != null)
                {

                    this.lbl_mmbrname.Text = resultName.ToString();
                    this.lbl_timestored.Text = t;
                    textBoxX1.Clear();                       
                }    
            }
        }
        else //if result id == null
        {
            sqlcon.Open();
            SqlCommand sqlcmdClockin = new SqlCommand("InputClockIn", sqlcon);
            sqlcmdClockin.CommandType = CommandType.StoredProcedure;
            sqlcmdClockin.Parameters.AddWithValue("@InputDate", d);
            sqlcmdClockin.Parameters.AddWithValue("@InputTime", t);
            sqlcmdClockin.ExecuteNonQuery();
            SqlDataAdapter sqlda = new SqlDataAdapter("SELECT * FROM tbl_attendanceMembers", sqlcon);
            DataTable dt = new DataTable();
            sqlda.Fill(dt);
            dataGridView1.DataSource = dt;
        }

        sqlcon.Close();

    }
}

Всякий раз, когда знаки равенства в этих точках равны "==" , он скачет до else part.

Однако, когда знаки равенства в этих точках равны "! =" , он проходит через все сослагательного наклонения .это явление не зависит от значения относительных ячеек в базе данных.

Что я делаю не так?

Я несколько раз проверял программу через точки останова ...

Iпроверил различные ситуации, относительные ячейки которых являются нулевыми и не равны нулю.Я не знаю, что не так.

По первому sqlcon.close(); это потому, что если я не напишу это, он скажет, что соединение не закрыто, что не имеет смысла для меня, потому что я написалsqlcon.close(); внизу ...

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вам необходимо проверить DBNull.Value, а также обработать любые исключения, которые могут возникнуть

private void textBoxX1_KeyDown(object sender, KeyEventArgs e)
{
    sqlcon.Close();
    sqlcon.Open();

    if (e.KeyCode == Keys.Enter)
    {
        try{
            string t = lbl_Time.Text;
            string d = lbl_Date.Text;

            string selectQueryName = "SELECT name FROM tbl_attendanceMembers where memberCode=" + "'" + textBoxX1.Text + "'";
            var sqlcmdName = new SqlCommand(selectQueryName, sqlcon);
            var resultName = sqlcmdName.ExecuteScalar();
            if (resultName != DBNull.Value)
            {
                string selectQueryId = "SELECT MAX(id) FROM tbl_attendanceSheet";
                var sqlcmdId = new SqlCommand(selectQueryId, sqlcon);
                var resultId = sqlcmdId.ExecuteScalar();

                if (resultId != DBNull.Value)
                {
                    string selectQueryCockin = "SELECT Clockin FROM tbl_attendanceSheet where id=" + "resultId";
                    var sqlcmdCockin = new SqlCommand(selectQueryCockin, sqlcon);
                    var resultCockin = sqlcmdId.ExecuteScalar();

                    if (resultCockin != DBNull.Value
                    {
                        this.lbl_mmbrname.Text = resultName.ToString();
                        this.lbl_timestored.Text = t;
                        textBoxX1.Clear();  
                    }
                }
            }
            else //if result id == null
            {
                sqlcon.Open();
                SqlCommand sqlcmdClockin = new SqlCommand("InputClockIn", sqlcon);
                sqlcmdClockin.CommandType = CommandType.StoredProcedure;
                sqlcmdClockin.Parameters.AddWithValue("@InputDate", d);
                sqlcmdClockin.Parameters.AddWithValue("@InputTime", t);
                sqlcmdClockin.ExecuteNonQuery();
                SqlDataAdapter sqlda = new SqlDataAdapter("SELECT * FROM tbl_attendanceMembers", sqlcon);
                DataTable dt = new DataTable();
                sqlda.Fill(dt);
                dataGridView1.DataSource = dt;
            }
        } catch (Exception ex) {
            //Do somethging with the exception if desired
        } finally {
            sqlcon.Close();
        }
    }
}
0 голосов
/ 14 декабря 2018

Чтобы проверить, является ли значение базы данных нулевым, используйте DBNull.Value

if (resultId != DBNull.Value) { 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...