Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的c#代码对所有if语句都进行了彻底检查,尽管它们都是假的_C#_If Statement_Null_Boolean - Fatal编程技术网

我的c#代码对所有if语句都进行了彻底检查,尽管它们都是假的

我的c#代码对所有if语句都进行了彻底检查,尽管它们都是假的,c#,if-statement,null,boolean,C#,If Statement,Null,Boolean,我有一个考勤表计划。我已经三次检查了我的数据库表,它们的所有列都是空的。我说,如果它们不是空的,那么通过,但尽管它们都是空的,它也通过它们:我不知道出了什么问题 private void textBoxX1_KeyDown(object sender, KeyEventArgs e) { sqlcon.Close(); sqlcon.Open(); if (e.KeyCode == Keys.Enter) { string t = lbl_Tim

我有一个考勤表计划。我已经三次检查了我的数据库表,它们的所有列都是空的。我说,如果它们不是空的,那么通过,但尽管它们都是空的,它也通过它们:我不知道出了什么问题

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();

    }
}
当我执行此代码时,它等于
lbl\u mmbrname.Text
resultName
lbl\u timestored.Text=t
。所以这意味着它一直到第三个if语句,这是错误的

我已经通过断点(f9)进行了检查

通过第一个
sqlcon.close()是因为如果我不写它,它会说连接没有关闭,这对我来说没有意义,因为我已经写了一个
sqlcon.close()下面…

根据
DbCommand.ExecuteScalar()
数据库返回null,查询返回对象。 所以我想你需要检查它,而不是
null

编辑 有关评论如下:

如果未找到结果集中第一行的第一列,则返回空引用。如果数据库中的值为null,则查询返回DBNull.value

因此,它可以根据
DbCommand.ExecuteScalar()
上的if,同时返回
null
DBNull.Value

。数据库返回null您的查询将返回一个对象。 所以我想你需要检查它,而不是
null

编辑 有关评论如下:

如果未找到结果集中第一行的第一列,则返回空引用。如果数据库中的值为null,则查询返回DBNull.value


因此,它可以同时返回
null
DBNull.Value

确定要
+“resultId”
而不是
+resultId
?也不要使用字符串连接来创建查询。使用参数化查询!这很容易受到sql注入的影响哇,糟糕,你是对的,我必须纠正这一点。你能给我一个关于学习更多知识和防止SQL注入的链接吗?感谢您的建议(请在google中键入)@GiladGreen是的,谢谢你确定你想要
+“resultId”
而不是
+resultId
?也不要使用字符串连接来创建查询。使用参数化查询!这很容易受到sql注入的影响哇,糟糕,你是对的,我必须纠正这一点。你能给我一个关于学习更多知识和防止SQL注入的链接吗?感谢您的建议(请在google中键入)@GiladGreen是的,你的权利谢谢你谢谢你的编辑!有一个后续问题的OP,因为我没有发布完整的答案。谢谢编辑!OP提出了一个后续问题,因为我没有给出完整的答案。