此问题特定于Oracle.DataAccess。我没有使用MSSQL的麻烦。
我无法使用.NET和Oracle.Access 4.121.2.0更新Oracle 12c数据库行。使用.NET从同一Oracle数据库检索数据没问题。通过SQLDeveloper更新没有问题。
我从几个网络资源中拼凑了这个更新命令。它没有遇到任何错误,但更新只是没有提交,或者找不到要更新的记录。我做错了什么?
很抱歉打扰你们,但我很困难,而且一度紧张。 谢谢。
sale
答案 0 :(得分:0)
我发布了一个答案,希望其他人可能会受益。 以下代码确实有效。主要(和说明)差异是Oracle命令创建的参数用法。不幸的是,我不太了解它们为什么是必要的。也许更熟练的人可以发表评论?
谢谢。
Imports Oracle.DataAccess.Client
Using connection As New OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings("LearnConnectionString").ConnectionString)
connection.Open()
Dim command As OracleCommand = New OracleCommand(String.Empty, connection) _
With {.CommandType = CommandType.Text, .BindByName = True}
command.CommandText = "UPDATE USERS SET BATCH_UID = :OLD_VALUE WHERE BATCH_UID = :NEW_VALUE"
Dim numberOfUpdatedRecords As Integer = 0
With command.Parameters
.Add(":OLD_VALUE", "name_bbadmin")
.Add(":NEW_VALUE", "name_library")
End With
Try
numberOfUpdatedRecords = command.ExecuteNonQuery()
Console.WriteLine(String.Format("No Errors: {0} is return value.", numberOfUpdatedRecords))
Catch ex As Exception
Console.WriteLine(String.Format("ERROR: {0}", ex.Message))
End Try
End Using
答案 1 :(得分:0)
可以通过两种不同的方式在OracleCommand中绑定参数。
默认情况下,command.BindByName值为false,因此将忽略该参数的名称,并按照它们在参数列表中添加的顺序使用它们。
如果将BindByName设置为true,则在绑定变量时将使用参数名称。这将为您提供您期望的行为。
http://www.oracle.com/au/products/database/o55odpnet-101704.html