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(ActiveRecordBase))
>>
>> >> >> '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
-~----------~----~----~----~------~----~------~--~---