使用ExecuteNonQuery的Oracle.DataAccess更新不会更新

时间:2016-03-16 19:23:05

标签: .net oracle updates

此问题特定于Oracle.DataAccess。我没有使用MSSQL的麻烦。

我无法使用.NET和Oracle.Access 4.121.2.0更新Oracle 12c数据库行。使用.NET从同一Oracle数据库检索数据没问题。通过SQLDeveloper更新没有问题。

我从几个网络资源中拼凑了这个更新命令。它没有遇到任何错误,但更新只是没有提交,或者找不到要更新的记录。我做错了什么?

很抱歉打扰你们,但我很困难,而且一度紧张。 谢谢。

sale

2 个答案:

答案 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