我可以将 OledbCommand 的参数传递给其他 OledbCommand 吗?

Can I pass a parameter of an OledbCommand to other OledbCommand?

这可能是个愚蠢的问题,但我需要一些解决方案。
我做过

cmd.CommandText = "Insert Table1(Col1,Col2,Col3,Date) Values (1,'aa',101,?)"
cmd.Connection = con2
cmd.Parameters.AddWithValue("@Date", transdate)
ExecuteQuery(con2,cmd)

我写了下面的代码来避免写 Using.. End Using everywhere。
如果没有参数,查询运行正常。

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

当我在 Using 块下编写 cmd 时,它可以很好地处理参数。
但正如我所说,我避免在任何地方写 Using
但是这样做会产生错误——没有给定一个或多个必需参数的值。

您需要调整 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

如果您正在寻找一种让您的数据库生活更轻松的方法,请查看 Dapper 或 Entity Framework - 您使用对象,它会为您写入所有 sql。这不是控制的停止(您仍然编写查询),它是在委托执行查询、检查结果、挖掘每个文本或 int 并将其分配给用户对象的名称或年龄等无聊的方面。

如果您到了不想编写 SQL 的地步,请使用 Entity Framework,因为它可以自动在您的对象和数据库之间进行转换