使用存储过程检查SQL Server数据库中是否已存在行
我插入了两行具有相同内容的表,但是用于搜索现有数据的代码没有返回所需的结果 这是我的VB.Net代码:使用存储过程检查SQL Server数据库中是否已存在行,sql,.net,sql-server,vb.net,sql-server-2008,Sql,.net,Sql Server,Vb.net,Sql Server 2008,我插入了两行具有相同内容的表,但是用于搜索现有数据的代码没有返回所需的结果 这是我的VB.Net代码: Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click Try If DateTimePicker1.Value.Date >= DateTime.Parse(TxtDateFrom.Text) And DateTim
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
Try
If DateTimePicker1.Value.Date >= DateTime.Parse(TxtDateFrom.Text) And DateTimePicker1.Value.Date <= DateTime.Parse(TxtDateTo.Text) Then
Dim cmd1 As New SqlCommand
cmd1 = New SqlCommand("check_sched", connection)
cmd1.CommandType = CommandType.StoredProcedure
Dim rd As SqlDataReader
cmd1.Parameters.AddWithValue("@empid", Label17.Text)
cmd1.Parameters.AddWithValue("@datesched", DateTimePicker1.Value.Date)
cmd1.Parameters.AddWithValue("@timefrom", TimePicker1.Text)
cmd1.Parameters.AddWithValue("@timeto", TimePicker1.Text)
rd = cmd1.ExecuteReader()
If rd.HasRows Then
MsgBox("Employee already assigned a job for the particular time period", MsgBoxStyle.Information, "Change Time Period")
Else
Dim cmd As New SqlCommand
cmd = New SqlCommand("insert_schedule1", connection)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@actid", SqlDbType.Int).Value = Label2.Text
cmd.Parameters.Add("@activity", SqlDbType.NVarChar).Value = CmbActivity.Text
cmd.Parameters.Add("@serviceid", SqlDbType.Int).Value = Label14.Text
cmd.Parameters.Add("@servicename", SqlDbType.NVarChar).Value = TxtServiceType.Text
cmd.Parameters.Add("@pdatefrom", SqlDbType.NVarChar).Value = TxtDateFrom.Text
cmd.Parameters.Add("@pdateto", SqlDbType.NVarChar).Value = TxtDateTo.Text
cmd.Parameters.Add("@deptname", SqlDbType.NVarChar).Value = Label16.Text
cmd.Parameters.Add("@emp", SqlDbType.NVarChar).Value = CmbEmp.Text
cmd.Parameters.Add("@empid", SqlDbType.Int).Value = Label17.Text
cmd.Parameters.Add("@datesched", SqlDbType.DateTime).Value = myDate1
cmd.Parameters.Add("@timefrom", SqlDbType.Time).Value = TimePicker1.Value.TimeOfDay
cmd.Parameters.Add("@timeto", SqlDbType.Time).Value = TimePicker2.Value.TimeOfDay
cmd.Parameters.Add("@status", SqlDbType.Int).Value = "1"
cmd.ExecuteNonQuery()
MsgBox("Scheduled Successfully", MsgBoxStyle.Information, "Task Schedule")
CmbActivity.Text = ""
TxtServiceType.Text = ""
TxtDateFrom.Text = ""
TxtDateTo.Text = ""
'CmbSactivity.Text = ""
CmbEmp.Text = ""
DateTimePicker1.Text = Now
TimePicker1.Text = TimeOfDay
TimePicker2.Text = TimeOfDay
End If
Else
MsgBox("Please select a date within the duration", MsgBoxStyle.Information, "Invalid Date")
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
您的检查计划对@timeFrom和@timeTo字段都使用TimePicker1值,而insert分别使用TimePicker1和TimePicker2。这会导致您的支票看错日期
为了避免将来出现此问题并更容易找到这些错误,请尝试重构名称以匹配它们的用途,例如fromTimePicker和toTimePicker。您的检查计划对@timeFrom和@timeTo字段使用TimePicker1值,而insert分别使用TimePicker1和TimePicker2。这会导致您的支票看错日期
为了避免将来出现此问题并更容易找到这些错误,请尝试重构名称以匹配它们的用途,例如fromTimePicker和toTimePicker。请提供表结构和所需结果。使用表定义编辑问题。现在面临的问题是此代码未显示任何错误,但是如果我输入了两个相同empid的字段datesched,timefrom和timeto应显示员工在该时间段内已分配给另一项工作的消息框。相反,数据会再次添加到数据库中,显示消息框计划成功。请提供表结构和所需结果。使用表定义编辑问题。我现在面临的问题是代码没有显示任何错误,但如果我输入了两个具有相同empid、datesched、timefrom和timeto的字段,则应显示员工在该时间段已分配给其他工作的消息框。相反,数据会再次添加到数据库中,显示消息框Scheduled Successfully,我建议在INSERT存储过程中检查员工是否在该时间段内已被分配到另一个工作,并让其返回指示成功或失败的位输出参数。此外,我建议在INSERT存储过程中检查员工是否在该时间段内已被分配到另一个工作,并让它返回一个指示成功或失败的位输出参数。
create procedure check_sched
@empid int,
@datesched datetime,
@timefrom datetime,
@timeto datetime
as
begin
SELECT *
FROM tbl_schedule
WHERE empid = @empid
AND datesched = @datesched
AND timefrom >= @timefrom
AND timeto <= @timeto
end
CREATE TABLE [dbo].[tbl_schedule]
(
[actid] [int] NULL,
[activity] [nvarchar](350) NULL,
[serviceid] [int] NULL,
[servicename] [nvarchar](50) NULL,
[pdatefrom] [nvarchar](50) NULL,
[pdateto] [nvarchar](50) NULL,
[sactid] [int] NULL,
[sactivity] [nvarchar](500) NULL,
[deptname] [nvarchar](150) NULL,
[emp] [nvarchar](150) NULL,
[empid] [int] NULL,
[datesched] [datetime] NULL,
[timefrom] [datetime] NULL,
[timeto] [datetime] NULL,
[actimefrom] [datetime] NULL,
[actimeto] [datetime] NULL,
[completed] [int] NULL,
[status] [int] NULL
) ON [PRIMARY]