Solved

ref out parameters.

Posted on 2008-06-16
8
328 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
[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
  • 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 30

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
Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

 
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 30

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

Free Backup Tool for VMware and Hyper-V

Restore full virtual machine or individual guest files from 19 common file systems directly from the backup file. Schedule VM backups with PowerShell scripts. Set desired time, lean back and let the script to notify you via email upon completion.  

Question has a verified solution.

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

Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…

622 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