ref out parameters.

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;
        }


mathieu_cuprykAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
ZippitConnect With a Mentor Commented:
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
 
ZippitCommented:
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
 
anarki_jimbelCommented:
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
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
Solar_FlareCommented:
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
 
mathieu_cuprykAuthor Commented:
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
 
mathieu_cuprykAuthor Commented:
[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
 
anarki_jimbelCommented:
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
 
mathieu_cuprykAuthor Commented:
Great job!
0
All Courses

From novice to tech pro — start learning today.