通过交换Oledb.parameters.AddwithValue()可以为命令添加参数来编写什么内容?

时间:2019-05-28 07:42:02

标签: vb.net oledb oledbconnection oledbcommand

有人告诉我cmd.Parameters.AddWithValue不好,我们应该改写cmd.Parameters.Add
我指的一些链接是: Link 1Link 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

对我来说很好。 那么我应该使用什么以及如何使用?

1 个答案:

答案 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