我可以将 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,因为它可以自动在您的对象和数据库之间进行转换
这可能是个愚蠢的问题,但我需要一些解决方案。
我做过
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,因为它可以自动在您的对象和数据库之间进行转换