c# - 检查数据库中的单元格是否为空的正确方法是什么

标签 c# sql-server if-statement null

我有一个员工考勤项目。这是我的 table :

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部分.

但是,只要这些点中的等号是"!=",它就会通过所有的ifs。这种现象与数据库中相关单元格是否为空无关。

我做错了什么?

我已经多次通过断点检查程序...

我已经检查了相关单元格为空和不为空的不同情况。我不知道出了什么问题。

第一个 sqlcon.close(); 是因为如果我不写它,它会说连接未关闭,这对我来说没有意义,因为我写了一个 sqlcon.close(); 在那里...

最佳答案

要检查数据库值是否为空,请使用 DBNull.Value

if (resultId != DBNull.Value) { 

关于c# - 检查数据库中的单元格是否为空的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53780827/

相关文章:

c# - 哪些值不能用 double 正确表示

c# - 如何使用linq分配两个列表,并使用int创建一个新对象的列表?

C#:英语语法规则引擎?

c# - Linq 插入 : The column name ' ' is specified more than once in the SET clause or column list of an INSERT

c++ - .h 文件中的字符串预定义并使用它来过滤用户输入

c# - 如何显示用户时区的时间?

mysql - 如何根据A列的数据将B列的SQL搜索结果汇总为sum?

java - SQL Server 短暂登录失败 "Cannot open database "**** *"requested by the login. The login failed."

Java扫描器输入if语句

c# - 如果语句跳过条件