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非常重要,因此对象可以释放非托管资源。