.net OLEdbcommand.Prepare错误
我得到一个错误: Prepare方法要求所有参数都具有显式设置的类型 在下面代码的最后一行。 我看到过这样的说法,您必须设置每个参数的数据类型,但是当命令生成器生成它时,我如何才能做到这一点 我看到有人说他们不喜欢使用自动生成的查询,这是一种不好的方式去做我想做的事情吗.net OLEdbcommand.Prepare错误,.net,vb.net,ms-access,.net,Vb.net,Ms Access,我得到一个错误: Prepare方法要求所有参数都具有显式设置的类型 在下面代码的最后一行。 我看到过这样的说法,您必须设置每个参数的数据类型,但是当命令生成器生成它时,我如何才能做到这一点 我看到有人说他们不喜欢使用自动生成的查询,这是一种不好的方式去做我想做的事情吗 Dim checkDock As New OleDbCommand("SELECT Instance, DocketNumber, FormID, FieldName, Occurrence, FieldValu
Dim checkDock As New OleDbCommand("SELECT Instance, DocketNumber, FormID, FieldName, Occurrence, FieldValue FROM fielddata WHERE docketnumber = @dock AND formid = @formid " & _
"AND instance = @inst1")
checkDock.Connection = New OleDbConnection("Provider=" & My.Settings.Provider & ";" & "Data Source=" & My.Settings.DataSource1)
'create and execute the command to retrieve the saved data for the original instance
checkDock.Parameters.AddWithValue("@dock", dock)
checkDock.Parameters.AddWithValue("@formid", formid)
checkDock.Parameters.AddWithValue("@inst1", inst1)
Dim da As New OleDbDataAdapter(checkDock)
Dim dSet As New DataSet("copySet")
da.Fill(dSet)
'create a command builder to put the new entries in the database
Dim cb As New OleDb.OleDbCommandBuilder(da)
Dim rowList As New ArrayList()
For Each r As DataRow In dSet.Tables(0).Rows
Dim dRow As DataRow = dSet.Tables(0).NewRow
dRow.Item("Docketnumber") = dock2
dRow.Item("Formid") = formid
dRow.Item("fieldname") = r.Item("fieldname")
dRow.Item("occurrence") = r.Item("occurrence")
dRow.Item("fieldvalue") = r.Item("fieldvalue")
dRow.Item("Instance") = inst2
rowList.Add(dRow)
Next
For Each a As DataRow In rowList
dSet.Tables(0).Rows.Add(a)
Next
da.Update(dSet)
您需要在此处指定参数类型。与此相反:
checkDock.Parameters.AddWithValue("@dock", dock)
checkDock.Parameters.AddWithValue("@formid", formid)
checkDock.Parameters.AddWithValue("@inst1", inst1)
使用此方法:
// replace ??? with the correct type
checkDock.Parameters.Add("@dock", OleDbType.???).Value = dock;
checkDock.Parameters.Add("@formid", OleDbType.???).Value = formid;
checkDock.Parameters.Add("@inst1", OleDbType.???).Value = inst1;
希望有帮助。这些参数用于从数据库中提取数据tin。那部分很好用。在将新行添加到数据集中后,会导致更新时出错。如果我删除代码将新行添加到数据集中,那么更新工作正常,不会导致错误。