【问题标题】:VB.NET 2010 - MySQL Variable Assignment WarningVB.NET 2010 - MySQL 变量赋值警告
【发布时间】:2013-09-09 06:05:38
【问题描述】:

下面是一个简单的例程,用于测试是否有错误回滚事务。 VB.NET 告诉我 Catch 下的变量 tr.Rollback() “变量 tr.Rollback() 在被赋值之前已被使用”以及关于公共覆盖。

由于这是在 Try/Catch/End Try 中使用的,我原以为它会按照 Try 中的分配进行分配。

程序按预期运行。

对此的任何帮助将不胜感激。

MySQL 5.1.36 版和使用 InnoDB 的表

选项严格开启

导入 MySql.Data.MySqlClient 模块模块1

Sub Main()

    Dim cs As String = "Database=testdb;Data Source=qn-server1;" _
        & "User Id= xxxxxx"

    Dim conn As New MySqlConnection(cs)
    Dim cmd As New MySqlCommand()

    Dim tr As MySqlTransaction


    Try
        conn.Open()


        tr = conn.BeginTransaction()

        cmd.Connection = conn
        cmd.Transaction = tr

        cmd.CommandText = "UPDATE Authors SET Name = 'Leo Tolstoy' WHERE Id = 1"
        cmd.ExecuteNonQuery()
        cmd.CommandText = "UPDATE Books SET Title = 'War and Peace' WHERE Id = 1"
        cmd.ExecuteNonQuery()
        cmd.CommandText = "UPDATE Books SET Titl = 'Anna Karenina' WHERE Id = 2" <----- DELIBERATE ERROR on "Titl" TO TEST THE ROLL BACK I.E tr.Rollback()
        cmd.ExecuteNonQuery()

        tr.Commit()
        conn.Close()

    Catch ex As MySqlException
        tr.Rollback() <------------------------------ THIS LINE "Variable "tr" has been assigned a value............. 
        Console.WriteLine("Error: " & ex.ToString())
    End Try


    Console.ReadLine()




End Sub

结束模块

【问题讨论】:

    标签: mysql vb.net


    【解决方案1】:

    如果conn.Open() 的调用失败,就会出现问题。 MySqlException 将被抛出,由于 tr 变量/对象没有值,iteslf 将再次抛出异常。

    因此,在调用Rollback() 方法之前先检查tr 是否为Nothing 可以解决此问题,例如:

    Catch ex As MySqlException
        if tr IsNot Nothing Then tr.RollBack();
    

    编辑:这无助于消除警告。为此,您需要将 tr 变量初始化为:

    Dim tr As MySqlTransaction = Nothing
    

    【讨论】:

    • 哇,感谢您的快速回复。即使使用 If/Then,我仍然收到来自 VB 的相同消息
    • 要摆脱警告,您可以简单地将 tr 变量初始化为 Nothing。我将编辑我的答案。
    • 好的,但是我应该在哪里初始化为 Nothing,因为它已经在 public Dim tr As MySqlTransaction 和 Try tr = conn.BeginTransaction() 中定义了
    • 只需将= Nothing 添加到您的 Dim 语句中即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多