Solved

Get return value from ObjectDataSource

Posted on 2006-11-29
7
4,871 Views
Last Modified: 2008-02-20
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
Comment
Question by:atastec
  • 4
  • 3
7 Comments
 
LVL 28

Expert Comment

by:strickdd
ID: 18039108

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
 
LVL 5

Author Comment

by:atastec
ID: 18039609
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
 
LVL 28

Accepted Solution

by:
strickdd earned 500 total points
ID: 18039651
Try this:

Sub ObjectDataSource1_Inserted(s As Object, e As ObjectDataSourceStatusEventArgs)
  Dim intId As Integer
  intId = e.OutputParameters("Return")
End Sub
0
Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 
LVL 5

Author Comment

by:atastec
ID: 18040012
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
 
LVL 28

Expert Comment

by:strickdd
ID: 18040144
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
 
LVL 5

Author Comment

by:atastec
ID: 18040271
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
 
LVL 5

Author Comment

by:atastec
ID: 18040549
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

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

User art_snob (http://www.experts-exchange.com/M_6114203.html) encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

831 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question