Solved

Get return value from ObjectDataSource

Posted on 2006-11-29
7
4,904 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Secure Your Active Directory - April 20, 2017

Active Directory plays a critical role in your company’s IT infrastructure and keeping it secure in today’s hacker-infested world is a must.
Microsoft published 300+ pages of guidance, but who has the time, money, and resources to implement? Register now to find an easier way.

Question has a verified solution.

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

Suggested Solutions

This article discusses the ASP.NET AJAX ModalPopupExtender control. In this article we will show how to use the ModalPopupExtender control, how to display/show/call the ASP.NET AJAX ModalPopupExtender control from javascript, how to show/display/cal…
In .NET 2.0, Microsoft introduced the Web Site.  This was the default way to create a web Project in Visual Studio 2005.  In Visual Studio 2008, the Web Application has been restored as the default web Project in Visual Studio/.NET 3.x The Web Si…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
Are you ready to implement Active Directory best practices without reading 300+ pages? You're in luck. In this webinar hosted by Skyport Systems, you gain insight into Microsoft's latest comprehensive guide, with tips on the best and easiest way…

733 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