Yeah I'm a vb.net programmer too, so I feel your pain :-)
The code does not translate directly because vb in .net 3.5 does not
have multi line lambdas.
So anyway the code translated to vb.net looks like this:

    Private Function _executeDelegate(ByVal session As
NHibernate.ISession, ByVal sql As String) As Object
        Dim con As IDbConnection = session.Connection
        Dim cmd As IDbCommand = con.CreateCommand()

        If session.Transaction.IsActive Then
            session.Transaction.Enlist(cmd)
        End If

        cmd.CommandText = sql
        cmd.CommandType = CommandType.Text
        cmd.CommandTimeout = 5

        Dim ret As Object
        ret = cmd.ExecuteScalar()

        Return ret
    End Function

    Public Function getSQLvalueMediatorExecute(ByVal sql As String) As Object
        Return ActiveRecordMediator.Execute(GetType(ActiveRecordBase),
Function(session As NHibernate.ISession, data As Object)
_executeDelegate(session, sql), Nothing)
    End Function

Hope this helps.

~Gerdus


On Fri, Sep 4, 2009 at 8:14 AM, the.wizard<[email protected]> wrote:
>
> Now I get it, but I can't translate the C# code in the link to VB.NET.
> How to use the delegate keyword in VB.NET?
> Is the link has a VB version?
> Really thanks a lot Gerdus.
>
> Regards.
>
> On 3 Sep, 18:04, Gerdus van Zyl <[email protected]> wrote:
>> Just use the code given in the blog (ActiveRecordMediator.Execute)
>> inside ExecSPNonQueryForTransaction and remove the pSession parameter.
>> Activerecord knows what the current session is when you use
>> ActiveRecordMediator.Execute.
>>
>>
>>
>> On Thu, Sep 3, 2009 at 12:55 PM, the.wizard<[email protected]> wrote:
>>
>> > Hi Gerdus, thank you for the link, but it still can solve my problem.
>> > So here is my code in a static class called ARHelper:
>> > Public NotInheritable Class ARHelper
>> >    Public Shared session As NHibernate.ISession
>> >    Public Shared Function ExecSPNonQueryForTransaction(ByVal SPName
>> > As String, _
>> >                                                        ByVal pSession
>> > As NHibernate.ISession, _
>> >                                                        ByVal
>> > ParamArray SPParameters() As IDataParameter) As Integer
>> >        Dim count As Integer = 0
>> >        session = pSession
>> >        Dim command As IDbCommand = session.Connection.CreateCommand()
>> >        command.CommandText = SPName
>> >        command.CommandType = CommandType.StoredProcedure
>> >        For Each param As IDataParameter In SPParameters
>> >            command.Parameters.Add(param)
>> >        Next
>> >        count = command.ExecuteNonQuery()
>>
>> >        Return count
>> >    End Function
>> > End Class
>>
>> > Now in one of my aspx page, I write something like this:
>> > Protected Sub btnCreateDinner_Click(ByVal sender As Object, ByVal e As
>> > EventArgs) Handles btnCreateDinner.Click
>> >   Dim transaction As New Castle.ActiveRecord.TransactionScope()
>>
>> >        Try
>> >            Dim dinner As New Dinner()
>>
>> >            dinner.Title = txtTitle.Text
>> >            dinner.EventDate = Now.AddDays(7)
>> >            dinner.Description = txtDescription.Text
>> >            dinner.HostedBy = "Castle.Dinner"
>> >            dinner.ContactPhone = txtContactPhone.Text
>> >            dinner.Address = txtAddress.Text
>> >            dinner.Country = txtCountry.Text
>> >            dinner.Latitude = 10
>> >            dinner.Longitude = 100
>>
>> >            ' Didn't need to write this.
>> >            ' Provided by ActiveRecordBase
>> >            dinner.Save()
>>
>> >            Dim pDinnerID As New SqlClient.SqlParameter()
>> >            pDinnerID.ParameterName = "@DinnerID"
>> >            pDinnerID.Value = 1
>>
>> >            Dim pAttendeeName As New SqlClient.SqlParameter()
>> >            pDinnerID.ParameterName = "@AttendeeName"
>> >            pDinnerID.Value = "UNLUCKY.GUY"
>>
>> >            ARHelper.ExecSPNonQueryForTransaction("spr_InsertRSVP",
>> > transaction.GetSession(transaction), pDinnerID, pAttendeeName)
>> >        Catch ex As Exception
>> >            transaction.VoteRollBack()
>> >            Throw
>> >        Finally
>> >            transaction.Dispose()
>> >        End Try
>> > End Sub
>> > When I run my application, it will result in an exception at
>> > transaction.GetSession(transaction), I really confuse what to put as
>> > the parameter for GetSession method.
>> > Anybody please help me.
>> > Thanks a lot.
>>
>> > Regards.
>>
>> > On 2 Sep, 20:21, Gerdus van Zyl <[email protected]> wrote:
>> >> The code I gave is probably wrong since it does not use the current
>> >> session I think. (I have moved on from using activerecord sessions and
>> >> now just use AR for mapping,config and handle nhibernate sessions
>> >> directly)
>>
>> >> Anyway see this blog post I just 
>> >> found:http://www.kenegozi.com/Blog/2008/02/28/executing-plain-ol-sql-in-act...
>>
>> >> ~G
>>
>> >> On Wed, Sep 2, 2009 at 12:36 PM, the.wizard<[email protected]> wrote:
>>
>> >> > Hello Gerdus,
>> >> > Thank you for replying my post. I still don't understand what you are
>> >> > explain in your post, please explain it more detail.
>> >> > My goal is to save a data using active record object and execute a dml
>> >> > stored procedure in one db transaction.
>> >> > I have create a method that accept ISession object from parameter,
>> >> > then retrieve the command object from the ISession object. After that
>> >> > the command object will be use with ADO.NET to execute a dml stored
>> >> > procedure (using executenonquery method).
>> >> > Then I create a transactionscope just like you explain, but then I can
>> >> > get the session object from this transactionscope object. It has a
>> >> > GetSession method, but it need one parameter, a key that is an object
>> >> > type which I don't know what should I put for get it working. Have
>> >> > tried a lot but all failed getting an exception.
>> >> > Please help me, thanks a lot.
>> >> > Regards,
>> >> > the.wizard
>>
>> >> > On 2 Sep, 13:50, Gerdus van Zyl <[email protected]> wrote:
>> >> >> I think you need to create a transactionscope yourself like:
>> >> >> TransactionScope transaction = new TransactionScope();
>> >> >> then you can use and pass it around as you like. Or what am I missing?
>>
>> >> >> And then you need a function like this to get the database connection
>> >> >> and enlist it in the transaction:
>> >> >>     Public Function getSQLCommand() As IDbCommand
>> >> >>         Dim sess As ISession
>> >> >>         'activerecord kry session wat connection bevat
>> >> >>         sess = 
>> >> >> ActiveRecordMediator.GetSessionFactoryHolder().CreateSession(GetType(Active­­­RecordBase))
>>
>> >> >>         'kry connnection vanaf activerecord session en create command
>> >> >>         Dim com As IDbCommand = sess.Connection.CreateCommand()
>> >> >>         If sess.Transaction.IsActive Then
>> >> >>             sess.Transaction.Enlist(com)
>> >> >>         End If
>>
>> >> >>         Return com
>> >> >>     End Function
>>
>> >> >> ~Gerdus
>>
>> >> >> On Wed, Sep 2, 2009 at 3:46 AM, the.wizard<[email protected]> 
>> >> >> wrote:
>>
>> >> >> > Hi everyone,
>> >> >> > Does anyone know how to get the session object in castle active 
>> >> >> > record
>> >> >> > when doing a transaction? I want to perform a transaction that 
>> >> >> > consist
>> >> >> > of a direct save using Castle Active Record object, and using a 
>> >> >> > stored
>> >> >> > procedure, and I need the session object to pass it to my method that
>> >> >> > execute my stored procedure.
>> >> >> > Please help me, I have already frustated with this problem, have been
>> >> >> > looking all over internet, but can't find one to solve this problem.
>> >> >> > Really thanks a lot.
>>
>> >> >> > Regards.- Sembunyikan teks kutipan -
>>
>> >> >> - Perlihatkan teks kutipan -- Sembunyikan teks kutipan -
>>
>> >> - Perlihatkan teks kutipan -- Sembunyikan teks kutipan -
>>
>> - Perlihatkan teks kutipan -
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to