有人告诉我cmd.Parameters.AddWithValue
不好,我们应该改写cmd.Parameters.Add
。
我指的一些链接是:
Link 1和Link 2。
我引用了该链接,但是该链接提供了有关SQL Connection的示例。我到处都在使用Oledb Connection。而且.Add
在Oledb Connection上无法正常使用。
在研究堆栈溢出和其他站点时,我发现几乎每个人都在使用.AddWithValue
。
有人使用.Add
,我尝试了他们的方法,并收到类似“必须声明标量变量”的错误。。
再次搜索错误将给出使用.AddWithValue
我当前正在使用这样的参数
cmd = New OleDbCommand("INSERT INTO TABLE (Col1,Col2,Col3)
VALUES('" & ColVal1 & "','" & ColVal2 & "',?)", con1)
'With cmd.Parameters
' .Add(New OleDbParameter("@Trans_Date", TransDate))
' '.Add(New OleDbParameter("@Password", txtPassword.Text))
'End With
cmd.Parameters.AddWithValue("@Col3", OleDbType.Date).Value = TransDate
对我来说很好。 那么我应该使用什么以及如何使用?
答案 0 :(得分:0)
该代码是错误的。当您调用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