2013-03-18 4 views
0

я получаю следующее сообщение об ошибке на моем веб-форму:Пустой TextBox1.Text дает мне ошибку

Cast from string "" to type 'Date' is not valid. 

Я предполагаю, что это из-за этой линии (но мое предположение может быть неправильным):

command.Parameters.Add(New SqlParameter("col3", SqlDbType.DateTime, 8)).Value = some_date_parameter 

Что в функции:

Function ProcessAction(ByVal col1 As Integer, ByVal col2 As String, ByVal col3 As Date, ByVal col4 As Integer, ByVal col5 As String) as something 

    '... 
    command.Parameters.Add(New SqlParameter("@col1", SqlDbType.Int, 4)).Value = col1 
    command.Parameters.Add(New SqlParameter("@col2", SqlDbType.VarChar, 255)).Value = col2 
    command.Parameters.Add(New SqlParameter("@col3", SqlDbType.DateTime, 8)).Value = col3 
    command.Parameters.Add(New SqlParameter("@col4", SqlDbType.Int, 4)).Value = col4 
    command.Parameters.Add(New SqlParameter("@col5", SqlDbType.VarChar, 255)).Value = col5 

    '... 

    Return something 

End Function 

Что называется с помощью кнопки:

Sub ButtonClick(ByVal Source As Object, ByVal E As EventArgs) 

    '... 

    structRecord = ProcessAction(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text) 

    '... 

End Sub 

Где structRecord является:

Public Structure structRecord 
    Public col1 As Integer 
    Public col2 As String 
    Public col3 As Date 
    Public col4 As Integer 
    Public col5 As String 
End Structure 

Фактическая ошибка получает в этой строке во время выполнения, которая находится в ButtonClick:

structRecord = ProcessAction(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text) 

Как эта проблема может быть исправлена? Я в основном хочу, чтобы пользователь продолжал работу с остальной частью webapp, даже если TextBox3.Text оставлен пустым.

ответ

0

Как правило, вы будете тестировать свои входы, чтобы убедиться, что они находятся в допустимом или допустимом диапазоне.

В случае даты вы хотите проверить, что значение будет конвертировать в дату, и если да, передайте это как параметр. Если это не действительная дата, вы можете передать нулевое значение в запрос.

Запрос должен быть достаточно умным, чтобы принять дату или нуль; однако без этого запроса я не могу вам помочь.

+0

Так вы думаете, что ошибка в настоящее время запускается из запроса, вместо 'Struct' который ожидающей' date' вместо '' String' для col3'? – oshirowanen

+0

@oshirowanen: Нет. Я предлагаю вам сделать одну из двух вещей. Любое изменение ProcessAction для принятия всех строк и внутри него делает проверку или выполняет правильную проверку и конверсии до вызова ProcessAction. В любом случае, вам нужно протестировать и сделать преобразование вместо того, чтобы полагаться на неявное преобразование, когда вы знаете, что оно потерпит неудачу. – NotMe

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

  • Нет связанных вопросов^_^