2015-08-27 2 views
0

Я изменяю веб-страницу. Веб-страница использует визуальный базис, а моя база данных - база данных SQL.Ошибка получения значения даты

Веб-страница дает мне полный отпуск по болезни, комп и отпуск. Прямо сейчас, я получаю имя входа в систему, кто зарегистрировался на компьютере, и я просматриваю EmployeeID в tblEmployees, поэтому я могу выполнить поиск tblTimeAvailable с помощью EmployeeID, а затем добавить разные времена.

Я хочу также получить StartDate от tblEmployees, поэтому я также могу выполнить поиск по дате юбилея (после того, как я вычислил его с датой начала). Я получаю сообщение об ошибке «Значение типа„Integer“не может быть преобразован в„Дата“на rvsd = command2.ExecuteNonQuery линии Вот мой код:.

Dim rve As Object 
    Dim rvsd As Date 
    Dim dt As Date = Today 

    'Get network login name (name only) 
    split = windowsLoginName.Split("\".ToCharArray) 
    vname = split(1) 

    'Get employeeid from table that matches login name 
    Dim Connection As String = "Data Source=WillSQL\ict2;Initial Catalog=timesql_testing;Integrated Security=SSPI" 
    Using con As New SqlConnection(Connection) 
     Dim sqlemp As String = "SELECT EmployeeID FROM tblEmployees where login = @loginname" 
     Dim sqlstdt As String = "SELECT StartDate FROM tblEmployees where login = @loginname" 
     Dim command As New SqlCommand(sqlemp, con) 
     Dim command2 As New SqlCommand(sqlstdt, con) 
     con.Open() 
     command.Parameters.Add(New SqlParameter With {.ParameterName = "@loginname", .SqlDbType = SqlDbType.NVarChar, .Value = vname}) 
     command2.Parameters.Add(New SqlParameter With {.ParameterName = "@loginname", .SqlDbType = SqlDbType.NVarChar, .Value = vname}) 
     rve = command.ExecuteScalar 
     rvsd = command2.ExecuteNonQuery 
    End Using 

    Dim theDateThisYear As Date 

    theDateThisYear = DateSerial(Year(Now), Month(rvsd), Day(rvsd)) 

    If theDateThisYear < Now() Then 
     theDateThisYear = DateAdd("yyyy", 1, theDateThisYear) 
    End If 

    Dim NextAnniversary As Date = theDateThisYear 
    MsgBox(NextAnniversary) 

     'Get Sick Time - DOES NOT INCLUDE CHECKING TO MAKE SURE LESS THAN ANNIV DATE YET 
    Using con As New SqlConnection(Connection) 
     Dim sqls1 As String = "Select SUM(NoofHours) as Total from tblTimeAvailable where workcode = 1 and EmployeeID = @emp" 
     Dim command As New SqlCommand(sqls1, con) 
     con.Open() 
     command.Parameters.Add(New SqlParameter With {.ParameterName = "@emp", .SqlDbType = SqlDbType.NVarChar, .Value = rve}) 
     rvsa = command.ExecuteScalar 
    End Using 

Заранее спасибо за любую помощь вы можете дать мне !

+0

Использование [Option Strict On] (https://msdn.microsoft.com/en-us/library/zcd4xwzs.aspx) - это даст полезное предложение. –

ответ

1

Предполагая, что столбец [StartDate] в базе данных имеет тип DateTime, то все, что вам нужно сделать, это

rvsd = CDate(command2.ExecuteScalar) 

Хотя вы могли бы извлечь оба значения с одним запросом:

SELECT [EmployeeID], [StartDate] FROM [tblEmployees] where [login] = @loginname" 

и так

Dim rve As String 
Dim rvsd As Date 

Dim connStr As String = "Data Source=WillSQL\ict2;Initial Catalog=timesql_testing;Integrated Security=SSPI" 
Dim sql = "SELECT [EmployeeID], [StartDate] FROM [tblEmployees] where [login] = @loginname" 

Using conn As New SqlConnection(connStr) 
    Using cmd As New SqlCommand(Sql, conn) 
     cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@loginname", .SqlDbType = SqlDbType.NVarChar, .Value = vname}) 
     conn.Open() 
     Dim rdr = cmd.ExecuteReader() 
     If rdr.HasRows Then 
      rdr.Read() 
      rve = rdr.GetString(0) 
      rvsd = rdr.GetDateTime(1) 
     End If 
    End Using 
End Using 
+0

Да! Огромное спасибо! – user3033348