Этот код неправильный. Когда вы вызываете AddWithValue
, вторым аргументом является значение, и тип данных определяется из этого. Если бы вы собирались позвонить AddWithValue
, это выглядело бы так:
cmd.Parameters.AddWithValue("@Col3", TransDate)
Причина, по которой вы должны вызывать Add
, заключается в том, что может случиться так, что выведенный тип данных не будет соответствовать тому, что фактически требуется базе данных, и это может вызвать проблемы в некоторых случаях. Ваш код - правильный шаблон, но он должен вызывать Add
, а не AddWithValue
:
cmd.Parameters.Add("@Col3", OleDbType.Date).Value = TransDate
Как таковой, вы создаете параметр со значением OleDbType.Date
и типом данных, выведенным из него, затем вы явно устанавливаете Value
в TransDate
. Это неправильно.
Кроме того, весь смысл использования параметров состоит в том, чтобы избежать проблем, которые могут возникнуть при конкатенации строк, и вы все равно используете конкатенацию строк. Не надо! Используйте параметр КАЖДЫЙ раз:
cmd = New OleDbCommand("INSERT INTO MyTable (Col1, Col2, Col3) VALUES (@Col1, @Col2, @Col3)", con1)
With cmd.Parameters
.Parameters.Add("@Col1", OleDbType.VarChar).Value = ColVal1
.Parameters.Add("@Col2", OleDbType.VarChar).Value = ColVal2
.Parameters.Add("@Col3", OleDbType.Date).Value = TransDate
End With