vb.net - 我可以将 OledbCommand 的参数传递给其他 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 到处。
如果没有参数,查询运行良好。
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
当我在Block下编写 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,请使用实体框架,因为它可以在您的对象和数据库之间自动转换
推荐阅读
- stenciljs - 构建输出文件
- docker - 传递环境变量时出现“无效的卷规范”
- python - TypeError:“元组”对象不可调用问题
- postgresql - 如何在 Postgresql 中的几何列上创建 Gin 索引?
- c# - 防止 Exchange 2013 将邮件正文文本/纯文本转换为 HTML
- c# - 试图找出模型和 DbContext 的 EntityFramework 元数据:'Employee'
- javascript - 从 json 数组创建数据结构
- python - Python守护进程线程内存泄漏?
- r - 无法重置反应性 rhandsontable observeEvent
- javascript - 用于过滤转换的 Javascript for 循环