我刚刚解决了同样的问题,就是如何让在职员工的离职日期为空值(因为他们仍在公司工作)。
我用 VS 2017 做了一个小程序,它是 VB.Net 语言,老板让我准备员工列表程序,并在数据库中完成他们的加入日期和离职日期。
当我输入活跃的员工数据时,这对我来说是个问题,因为我无法填写辞职日期(他们仍在工作)并且 VB 不允许 datetimepicker 具有空值。
请参考我的代码查看解决方案;我只添加一个对象来捕获空值并将其作为指定日期发送到数据库。
Private Sub btnsave_Click(sender As Object, e As EventArgs) _
Handles btnsave.Click
Dim exresigndate As String = ""
If rbactive.Checked = True Then
status = rbactive.Text
exresigndate = "Null"
ElseIf rbresigned.Checked = True Then
status = rbresigned.Text
exresigndate = "@ResignDate"
End If
Try
Call SearchEmpID()
If Not DR.HasRows Then
Call connection()
Dim CMD As SqlCommand
Dim SQL As String
SQL = "INSERT INTO Employee VALUES (@EmpID, @EmpName, @DeptName, @EmpStatus, @JoinDate, " & exresigndate & ", @Address, @Photo)"
CMD = New SqlCommand(SQL, CONN)
CMD.Parameters.AddWithValue("@EmpID", txtid.Text)
CMD.Parameters.AddWithValue("@EmpName", txtname.Text)
CMD.Parameters.AddWithValue("@DeptName", cmbdept.Text)
CMD.Parameters.AddWithValue("@EmpStatus", status)
CMD.Parameters.AddWithValue("@JoinDate", Format(dtpjoin.Value, "MM-dd-yyyy"))
If rbresigned.Checked = True Then
CMD.Parameters.AddWithValue("@ResignDate", Format(dtpresigned.Value, "MM-dd-yyyy"))
End If
CMD.Parameters.AddWithValue("@Address", txtaddress.Text)
Dim MemoryStream As New MemoryStream
PictureBox1.BackgroundImage.Save(MemoryStream,
PictureBox1.BackgroundImage.RawFormat)
Dim Dphoto As Byte() = MemoryStream.GetBuffer
Dim Images As New SqlParameter("@Photo", SqlDbType.Image)
Images.Value = Dphoto
CMD.Parameters.Add(Images)
CMD.ExecuteNonQuery()
Else
Call koneksi()
Dim CMD As SqlCommand
Dim SQL As String
SQL = "UPDATE Employee SET EmpName='" & txtname.Text & "',DeptName='" & cmbdept.Text & "',EmpStatus='" & status & "',JoinDate='" & Format(dtpjoin.Value, "MM-dd-yyyy") & "', ResignDate='" & Format(dtpresigned.Value, "MM-dd-yyyy") & "', Address='" & txtaddress.Text & "' ,Photo='" & SqlDbType.Image & "' where EmpID='" & txtid.Text & "'"
CMD = New SqlCommand(SQL, CONN)
CMD.ExecuteNonQuery()
MsgBox("Saved")
End If
TextBox1.Clear()
PictureBox1.Image = Nothing
CMD.Dispose()
CONN.Close()
Call Awal()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
我有两个 dateTimePickers ,一个用于加入日期,另一个用于辞职日期。
每个 datetimepicker 都将根据他们的就业状态(无论是活跃还是辞职)被激活,并且它们将通过以下代码启用或禁用:
If rbactive.Checked = True Then
status = rbactive.Text
exresigndate = "Null"
ElseIf rbresigned.Checked = True Then
status = rbresigned.Text
exresigndate = "@ResignDate"
End If
*rb=单选按钮
在上面的单选按钮代码中,我将 exresigndate 描述为 String 并给出 null 值。
Dim exresigndate As String = ""
所以我可以在下面的代码中调用它。
然后我将 exresigndate 放入 insert syntak 以填充 ResignDate 字段。
SQL = "INSERT INTO Employee VALUES (@EmpID, @EmpName, @DeptName, @EmpStatus, @JoinDate, " & exresigndate & ", @Address, @Photo)"
之后,我给出条件调用exrisgndate(null value) 为在职员工和ResignDate 值为dtreigned.value 为辞职员工。
更多解释请看input form。