проблема преобразования даты и времени при вставке данных в базу данных sql - PullRequest
0 голосов
/ 30 июня 2011

Я использовал для запроса:

Dim a As String
a = "INSERT INTO tblVisitor(Name, Sex, TimeIn, EnterDate)
     VALUES('"& txtName.Text &"', '"& cboSex.Text &"', '"& Now() &"', '"& DateTime.Parse(cboEnterDate.Text) &"')"

myCommand = New SqlCommand(a, myConnection)
myCommand.ExecuteNonQuery()
........................................

Какой cboEnterDate является моим DateTime Picker.Тогда я получил сообщение:

Conversion failed when converting date time from character string.

Пожалуйста, помогите.

Ответы [ 4 ]

6 голосов
/ 30 июня 2011

Создавая строку, вы а) открываете себя для SQL-инъекций и б) в конечном итоге преобразуете строки в datetime в строки в datetime.

Если вместо этого вы используете параметры:

Dim a As String
a = "INSERT INTO tblVisitor(Name, Sex, TimeIn, EnterDate)
     VALUES(@Name, @Sex, @TimeIn, @EnterDate)"

myCommand = New SqlCommand(a, myConnection)
myCommand.Parameters.AddWithValue("@Name",txtName.Text)
myCommand.Parameters.AddWithValue("@Sex",cboSex.Text)
myCommand.Parameters.AddWithValue("@TimeIn",DateTime.Now)
myCommand.Parameters.AddWithValue("@EnterDate",DateTime.Parse(cboEnterDate.Text))
myCommand.ExecuteNonQuery()

, который выполняет только одно преобразование строки в дату и время.Хотя, если cboEnterDate является DateTimePicker , вы можете вообще не рассматривать его как строку:

myCommand.Parameters.AddWithValue("@EnterDate",cboEnterDate.Value)
2 голосов
/ 30 июня 2011

Поиск с использованием параметров SQL. Код, который вы используете сейчас, не только подвержен анализу проблем с форматами даты / времени, но и уязвим для атак SQL-инъекций. Создание операторов SQL с помощью конкатенации строк - это действительно очень плохая идея.

1 голос
/ 30 июня 2011

Когда вы используете DateTime.Parse(cboEnterDate.Text), она анализирует строку в объекте datetime. Вы должны отправить строку cboEnterDate.Text напрямую и позволить серверу SQL выполнить анализ

1 голос
/ 30 июня 2011

Замените Now () на Now.ToShortTimeString Это должно решить проблему.

Редактировать: К сожалению, и DateTime.Parse (cboEnterDate.Text) добавляет .ToShortDate в конец.

...