这可能是一个愚蠢的问题,但我需要一些解决方案。
我做完了
cmd.CommandText = "Insert Table1(Col1,Col2,Col3,Date) Values (1,'aa',101,?)"
cmd.Connection = con2
cmd.Parameters.AddWithValue("@Date", transdate)
ExecuteQuery(con2,cmd)
我在下面编写了代码,以避免编写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
块下编写cmd时,它可以很好地使用参数。
但是正如我所说,我避免在各处写Using
。
但是这样做会产生错误-一个或多个必需参数没有给定值。
答案 0 :(得分:1)
您需要调整ExecuteQuery,因为它正在执行新命令并丢失了Parameters。对其进行更改,以使其使用您传递的现有命令进行处理,或者将“参数”从入站命令转移到新命令
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。这并不是控制的停止(您仍在编写查询),而是委派了执行查询,遍历结果,挖掘每个文本或整数并将其分配给用户对象的名称或年龄的无聊之处。 >
如果您也不想编写SQL,请使用Entity Framework,因为它可以自动在对象和db之间转换