I get this error “Visual Basic 9.0 does not support this kind of lambda expression” here ” ExecuteWithinTransaction(Sub(con, trans) InsertA(“Al”, con, trans))” when i hover over the Sub
I am new to lambda expressions. Any help appreciated. I am using VS 2010 and .NET 3.5.
Sub Main()
ExecuteWithinTransaction(Sub(con, trans) InsertA("Al", con, trans))
ExecuteWithinTransaction(Sub(con, trans) InsertB("Bert", con, trans))
ExecuteWithinTransaction(Sub(con, trans)
InsertA("Albert", con, trans)
InsertB("Einstein", con, trans)
End Sub)
End Sub
''' <summary>
''' Executes an action within a transaction. handles connection and transaction management
''' </summary>
''' <param name="action">The action to be executed</param>
Sub ExecuteWithinTransaction(ByVal action As Action(Of SqlConnection, SqlTransaction))
Dim connection As SqlConnection = New SqlConnection("CONNECTIONSTRING")
connection.Open()
Try
Dim transaction = connection.BeginTransaction()
Try
action(connection, transaction)
transaction.Commit()
Catch ex As Exception
transaction.Rollback()
Throw 'rethrow exception preserving original stacktrace
End Try
Finally
connection.Close()
End Try
End Sub
Sub InsertA(ByVal name As String, ByVal connection As SqlConnection, ByVal transaction As SqlTransaction)
Dim cmd As SqlCommand = New SqlCommand("INSERT INTO XXX (Name) VALUES (@NAME)", connection, transaction)
cmd.Parameters.AddWithValue("@Name", name)
cmd.ExecuteNonQuery()
End Sub
Sub InsertB(ByVal name As String, ByVal connection As SqlConnection, ByVal transaction As SqlTransaction)
Dim cmd As SqlCommand = New SqlCommand("INSERT INTO YYY (Name) VALUES (@NAME)", connection, transaction)
cmd.Parameters.AddWithValue("@Name", name)
cmd.ExecuteNonQuery()
End Sub
Statement lambdas (Subs) are supported in VB.NET 2012+.VB.NET 2010 only supports function lambdas (
Functions).See Ric’s comments below for the answer.
Workaround if changing FW version is not possible: Write little helper subs in the ordinary, non-lambda form, and then pass them as delegates to
ExecuteWithinTransaction.So you would have
And then