Vb.net 我可以将OledbCommand的参数传递给其他OledbCommand吗?
这可能是个愚蠢的问题,但我需要一些解决办法。Vb.net 我可以将OledbCommand的参数传递给其他OledbCommand吗?,vb.net,oledb,oledbcommand,Vb.net,Oledb,Oledbcommand,这可能是个愚蠢的问题,但我需要一些解决办法。 我做得很好 cmd.CommandText = "Insert Table1(Col1,Col2,Col3,Date) Values (1,'aa',101,?)" cmd.Connection = con2 cmd.Parameters.AddWithValue("@Date", transdate) ExecuteQuery(con2,cmd) 我写了下面的代码以避免使用。。停止到处使用。 如果查询没有参数,则可以正常运行。 Private S
我做得很好
cmd.CommandText = "Insert Table1(Col1,Col2,Col3,Date) Values (1,'aa',101,?)"
cmd.Connection = con2
cmd.Parameters.AddWithValue("@Date", transdate)
ExecuteQuery(con2,cmd)
我写了下面的代码以避免使用。。停止到处使用。如果查询没有参数,则可以正常运行。
Private Sub ExecuteQuery(con as OledbConnection,cmd as OledbCommand)
Using con1 As New OleDbConnection(con.ConnectionString)
Using cmd1 As New OleDbCommand(cmd.CommandText)
cmd1.Connection = con1
con1.Open()
cmd1.ExecuteNonQuery()
con1.Close()
End Using
End Using
当我使用块在下写入cmd时,它可以很好地处理参数。
但正如我所说,我避免在任何地方使用编写。
但这样做会产生错误--一个或多个必需参数没有给定值。您需要调整ExecuteQuery,因为它正在生成新命令并丢失参数。更改它,使其使用您传递的现有命令,并对其进行处理,或将参数从入站命令传输到新命令
Private Sub ExecuteQuery(con as OledbConnection, cmd as OledbCommand)
Using con1 As New OleDbConnection(con.ConnectionString)
Try
cmd.Connection = con1
con1.Open()
cmd.ExecuteNonQuery()
con1.Close()
Finally
cmd.Dispose()
End Try
End Using
End Sub
Private Sub ExecuteQuery(con as OledbConnection,cmd as OledbCommand)
Using con1 As New OleDbConnection(con.ConnectionString)
Using cmd1 As New OleDbCommand(cmd.CommandText)
cmd1.Connection = con1
ForEach p as Parameter in cmd.Parameters
cmd1.Parameters.Add(p)
con1.Open()
cmd1.ExecuteNonQuery()
con1.Close()
End Using
End Using
End Sub
如果您正在寻找一种使db生活更轻松的方法,请查看Dapper或Entity Framework—您使用对象,它会为您编写所有sql。这并不是停止控制(您仍在编写查询),而是授权执行查询、查看结果、挖掘每个文本或int并将其分配给用户对象的名称或年龄等枯燥的方面
如果您也不想编写SQL,请使用实体框架,因为它可以自动在对象和数据库之间转换我得到了您的答案,但您能给我举个小例子吗。??此外,我还必须使用使用
关键字。编辑了一个示例inI的工作方式与您之前给出的示例相同,但在backgroundworker
中无法正常工作,因此我将使用使用
关键字。有人建议我使用Using
,效果很好,请检查这个链接。()BackgroundWorker不应该对使用有任何影响为什么,哦,为什么你会避免使用块来编写代码。它应该让你的生活更轻松。不再有关闭和处置代码。请将数据库对象保持为本地。在方法中声明为局部变量。在方法中使用它们。然后关闭并用相同的方法处理它们。这些对象可以使用GC无法收集的非托管代码。这使得Dispose非常重要,因此对象可以释放非托管资源。