Solved

ref out parameters.

Posted on 2008-06-16
8
320 Views
Last Modified: 2013-12-17
I have the following:


            InitialPrices.localhost.InitialPriceReportingService WS
               = new InitialPrices.localhost.InitialPriceReportingService();
            int Id = 0;
            string Status = null;
            WS.GetGradeCodeDetailID("WHT", ref Id, ref Status); // These values need to comback from the webservice the id and status.
I am not sure how to work with ref and out.

The method is as following:
[WebMethod(Description = "Get Grade Code Detail based on the grade name")]
        public void GetGradeCodeDetailID(string GradeName, out int GradeCodeDetailID, out string Status)
        {
            string procedureName = "init_price.PRICE_LIST_REPORTING.get_grade_code_dtl_id";
            try
            {
                Database db = DatabaseFactory.CreateDatabase("InitialPrices.Properties.Settings.ConnectionString");
                DbCommand dbCommand = db.GetStoredProcCommand(procedureName);

                db.AddInParameter(dbCommand, "p_grade_name", DbType.String, GradeName);
                db.AddOutParameter(dbCommand, "p_grade_code_dtl_id", DbType.Int32, 4);
                db.AddOutParameter(dbCommand, "p_status", DbType.String, 7);
                db.ExecuteNonQuery(dbCommand);
               

                GradeCodeDetailID = Convert.ToInt32( dbCommand.Parameters[1].Value, CultureInfo.InvariantCulture);
                Status = dbCommand.Parameters[2].Value.ToString();
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return;
        }


0
Comment
Question by:mathieu_cupryk
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 7

Accepted Solution

by:
Zippit earned 500 total points
ID: 21798186
change this line:
WS.GetGradeCodeDetailID("WHT", ref Id, ref Status);

to:
WS.GetGradeCodeDetailID("WHT", out Id, out Status);

after the call to 'GetGraceCodeDetailID' the variables ID and Status will have the output values in them.
0
 
LVL 7

Expert Comment

by:Zippit
ID: 21798214
ref and out are used mainly the same way.  They allow the called function to change the values of the parameters and have the updated values returned to the caller.  The difference between the two is that a ref parameter must be initialized before the call to the function is made.  An out parameter does not need to have it's value initialized before the function call is made as the function will initialize the value.

If the parameter is declared as an out parameter, like the following:

public function muFunction(ref int param1)

then it needs to be called as follows:

int myParam1 = 1234;
myFunction(ref myParam1);
// now do something with myParam1 and its new value

if the function uses an out parameter like the following:

public function muFunction(ref int param1)

then it is used and called as follows:

int myParam1;
myFunction(out myParam1);
// now do something with myParam1 and its new value
0
 
LVL 29

Expert Comment

by:anarki_jimbel
ID: 21798255
No much difference between 'ref' and 'out'. But you need to know it.

An argument passed to a ref parameter must first be initialized. 'out' parameter does not have to be explicitly initialized before being passed to an out parameter. This is major difference. So you may use either of two.

See msdn for more information. They have good example and good explanations:

'ref':
http://msdn.microsoft.com/en-us/library/14akc2c7(VS.71).aspx

'out':
http://msdn.microsoft.com/en-us/library/t3c3bfhx(VS.71).aspx
0
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 
LVL 15

Expert Comment

by:Solar_Flare
ID: 21799260
if you can, it is a good idea not to use out and ref parameters for web services as they are stateless.

if you must then make sure you read http://kbalertz.com/322624/Proxy-Class-First-Parameter-Service-Method-Returns-Return-Value-Reference.aspx
0
 

Author Comment

by:mathieu_cupryk
ID: 21805589
I get a no overload for:

 InitialPrices.InitialPriceReportingServiceWS.InitialPriceReportingService WS = new InitialPrices.InitialPriceReportingServiceWS.InitialPriceReportingService();
                            int GradeCodeDetailID;
                            string Status;
                           
                            WS.GetGradeCodeDetailID(gradeName, out GradeCodeDetailID, out Status);
                         


in the web service:

0
 

Author Comment

by:mathieu_cupryk
ID: 21805593
[WebMethod]
        public void GetGradeCodeDetailID(string gradeName, out int GradeCodeDetailID, out string Status)
        {

            string procedureName = "init_price.PRICE_LIST_REPORTING.get_grade_code_dtl_id";
            try
            {
                Database db = DatabaseFactory.CreateDatabase("InitialPrices.Properties.Settings.ConnectionString");
                DbCommand dbCommand = db.GetStoredProcCommand(procedureName);

                db.AddInParameter(dbCommand, "p_grade_name", DbType.String, gradeName);
                db.AddOutParameter(dbCommand, "p_grade_code_dtl_id", DbType.Int32, 4);
                db.AddOutParameter(dbCommand, "p_status", DbType.String, 7);
                db.ExecuteNonQuery(dbCommand);


                GradeCodeDetailID = Convert.ToInt32(dbCommand.Parameters[1].Value, CultureInfo.InvariantCulture);
                Status = dbCommand.Parameters[2].Value.ToString();
            }
            catch (Exception ex)
            {
                throw (ex);
            }
       }
0
 
LVL 29

Expert Comment

by:anarki_jimbel
ID: 21807272
Yeah, well. I'd agree with Solar_Flare. But I can't really see any problems for this specific case. And I'd use 'out' parameters too, not 'ref'.
0
 

Author Closing Comment

by:mathieu_cupryk
ID: 31467800
Great job!
0

Featured Post

How our DevOps Teams Maximize Uptime

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us. Read the use case whitepaper.

Question has a verified solution.

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

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…

828 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