• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 5126
  • Last Modified:

Get return value from ObjectDataSource

Given the following code how would I get the return value from InsertData():

<asp:ObjectDataSource ID="ObjectDataSource1" Runat="server"
        TypeName = "MyNamespace.MyObject"
        InsertMethod = "InsertData">
    <InsertParameters>
        <asp:Parameter Direction="ReturnValue" Name="Return" Type="Int32" />
    </InsertParameters>
</asp:ObjectDataSource>

I would like to be able to say something like the following in my code-behind:

Sub SomeGridView_DataBound(s As Object, e As EventArgs)
  Dim intId As Integer
  intId = ObjectDataSource1.SelectParameters(0).ReturnValue
End Sub

This obviously doesn't work, but hopefully you see what I'm trying to do here.

Thank you!
0
atastec
Asked:
atastec
  • 4
  • 3
1 Solution
 
strickddCommented:

Sub SomeGridView_Inserted(s As Object, e As ObjectDataSourceStatusEventArgs)
  Dim intId As Integer
  intId = e.OutputParameters("Return")
End Sub


<asp:ObjectDataSource ID="ObjectDataSource1" Runat="server"
        TypeName = "MyNamespace.MyObject"
        InsertMethod = "InsertData">
    <InsertParameters>
        <asp:Parameter Direction="InputOutput" Name="Return" Type="Object" />
    </InsertParameters>
</asp:ObjectDataSource>
0
 
atastecAuthor Commented:
Thanks for responding!
I'm actually using a DetailsView to do the insert.
It's telling me the data type of the second parameter needs to be DetailsViewInsertedEventArgs, not ObjectDataSourceStatusEventArgs.  Any ideas?  Am I missing something?
0
 
strickddCommented:
Try this:

Sub ObjectDataSource1_Inserted(s As Object, e As ObjectDataSourceStatusEventArgs)
  Dim intId As Integer
  intId = e.OutputParameters("Return")
End Sub
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
atastecAuthor Commented:
Closer, but I still can't get it to work.
This is basically what I have:

<asp:ObjectDataSource ID="srcClient" runat="server"
                TypeName="Intranet.BusinessLogicLayer.Client"
                InsertMethod="Insert"
                OnInserted="Client_Inserted" >
            <InsertParameters>
                <asp:Parameter Direction="InputOutput" Name="ReturnValue" Type="Object" />
            </InsertParameters>
</asp:ObjectDataSource>

Sub Client_Inserted(ByVal s As Object, ByVal e As ObjectDataSourceStatusEventArgs)
        Dim intId As Integer
        intId = e.OutputParameters("ReturnValue")
        reponse.write(intId)
End Sub

In my business logic layer this is what the Sub looks like:
Public Shared Sub Insert(ByVal ReturnValue As Object, _
                                ByVal Name As String, _
                                ByVal ShortName As String, _
                                ByVal ClientTypeID As Integer, _
                                ByVal CurrentClient As Boolean, _
                                ByVal ClientSince As String, _
                                ByVal Notes As String, _
                                ByVal CRMCompanyID As Integer)
            ReturnValue = 5
End Sub

Given this, '5' should be written to the screen, but '0' is instead.  What am I doing wrong?
0
 
strickddCommented:
Are you calling a stored procedure with the objectdatasource? I have tried using a return value, but i couldn't do it through a datasource without designating a parameter as output ie:

CREATE PROCEDURE dbo.[usr_InsertNew]
      (@ProjectID int OUTPUT )

And then in the proc:

SELECT @ProjectID = SCOPE_IDENTITY()
RETURN @ProjectID


You can also do this without a datasource like so:

SqlConnection Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConn"]);
SqlCommand Command = new SqlCommand("usr_InsertNew", Connection);
Command.CommandType = CommandType.StoredProcedure;

SqlParameter sqlParam = new SqlParameter();
sqlParam.ParameterName = "@ReturnVal";
sqlParam.Direction = ParameterDirection.Output;
sqlParam.Size = 4;
0
 
atastecAuthor Commented:
The ObjectDataSource isn't calling a stored procedure.  If you look closely at the code I've provided you can see it's calling a subroutine in a class I've written (Intranet.BusinessLogicLayer.Client).  To test this, all the ObjectDataSource does is call a subroutine (Insert) that sets the inputoutput parameter equal to 5, so we're not dealing with stored procedures at all at this point.
0
 
atastecAuthor Commented:
I got it to work.
I changed the "Direction" on my InsertParemeters back to "ReturnValue" so my ObjectDataSouce looks like:
<asp:ObjectDataSource ID="srcClient" runat="server"
                TypeName="Intranet.BusinessLogicLayer.Client"
                InsertMethod="Insert"
                OnInserted="Client_Inserted" >
            <InsertParameters>
                <asp:Parameter Direction="ReturnValue" Name="ReturnValue" Type="Int32" />
            </InsertParameters>
</asp:ObjectDataSource>

I changed e.OutputParameters to e.ReturnValue so my code behind looks like:
Sub Client_Inserted(ByVal s As Object, ByVal e As ObjectDataSourceStatusEventArgs)
        Dim intId As Integer
        intId = e.ReturnValue
        response.write(intId)
End Sub

And finally I changed the Insert() subroutine to a function and return the value I need.

Thanks for your help strickdd!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Amazon Web Services - Basic

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now