2015-04-19 12 views
1

Я вставил две строки с тем же содержимым таблицы, но код для поиска существующих данных не возвращает желаемый результат.Проверка наличия строки в базе данных SQL Server с использованием хранимой процедуры

Это мой 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 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 

Может кто-нибудь помочь мне найти ошибку?

Это моя хранимая процедура

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] 
+0

Просьба представить структуру таблицы и желаемые результаты. –

+0

Отредактировав вопрос с помощью таблицы definiton. Проблема теперь в том, что этот код не показывает никаких ошибок. Но если я ввел два поля с тем же самым empid, datesh, timefrom и timeto, он должен отобразить окно сообщения, которое сотрудник уже назначил для другого задания в это время. – Hrishi

+0

И вместо этого данные снова добавляются в базу данных, где отображается окно сообщения «Запланировано успешно». – Hrishi

ответ

4

Ваш график проверки использует значение TimePicker1 для обоих @timeFrom и @timeTo полей, в то время как ваша вставка использует TimePicker1 и TimePicker2 соответственно. Это заставляет ваш чек искать неверные даты.

Чтобы избежать этой проблемы в будущем и чтобы было легче найти эти ошибки, попробуйте реорганизовать имена в соответствии с тем, что они предназначены (например, fromTimePicker и toTimePicker).

+0

Кроме того, я бы предложил проверить, был ли сотрудник уже назначен для другого задания в этот период времени в хранимой процедуре INSERT и вернуть его бит. параметр, указывающий на успех или неудачу. –

Смежные вопросы