/**************************************************************************

* @author                        :  Chandar

* @version 1.0

* Development Environment        :  Microsoft Visual Studio .Net

* Name of the File               :  ProductDetails.cs

* Creation/Modification History  :

12-Oct-2002     Created

 

* Overview:

* This class defines the methods to retrieve and update details of a

* particular product to database. It also shows how Safe Type Mapping feature

* of ODP.NET can be used to prevent precision loss while retrieving high

* precision data from database.

*****************************************************************************/

 

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using Oracle.DataAccess.Client;

namespace  SafeTypeMapping

{

      /// <summary>

      /// Definition of ProductDetails class.

      /// </summary>

      public class ProductDetails : System.Windows.Forms.Form

      {

  

            // variable to communicate with database

            OracleDataAdapter productsAdapter;

            // variable to get data from the database

            DataSet detailsDataSet;

            // variable to store product ID of the product whose details are sought

            int productID;

            // variable to store the user selection in Products screen

            bool safeType;

 

            //definition of various controls on the form

            private System.Windows.Forms.Button cmdUpdate;

            private System.Windows.Forms.Button cmdClose;

            private System.Windows.Forms.Label lblPrice;

            private System.Windows.Forms.TextBox txtPrice;

            private System.Windows.Forms.Label lblProduct;

            private System.Windows.Forms.Label lblName;

            private System.Windows.Forms.TextBox txtWeight;

            private System.Windows.Forms.Label lblWeight;

            private System.Windows.Forms.Label lblPID;

            private System.Windows.Forms.Label lblID;

            /// <summary>

            /// Required designer variable.

            /// </summary>

            private System.ComponentModel.Container components = null;

 

            public ProductDetails()

            {                

                  InitializeComponent();

            }

           

            /**********************************************************************

             * This method retrieves the details of products from database in

             * a DataSet variable using OracleDataAdapter. It uses Safe Type

             * Mapping for "Weight" and "Price" column to avoid precision loss while

             * retrieving it from database. When Safe Type Mapping is used the

             * column data is retrieved as String type rather than default

             * .NET types.

             * If Safe Type Mapping is not used, the method throws an

             * "Arithmetic operation resulted in an overflow"  exception

             * when precision of column data is higher than that can be handled

             * by defalut .NET types.

            **********************************************************************/

            public bool getProductDetails(int productID, bool safeType)

            {

                  this.productID =productID;

                  this.safeType=safeType;

                  try

                  {                      

                        //Instantiate OracleDataAdapter to communicate with database

                        productsAdapter = new OracleDataAdapter();

               

                        // variable to automatically generate commands for making changes

                        // through DataSet

                        OracleCommandBuilder productsCmdBuilder = new OracleCommandBuilder(productsAdapter);

                       

                        //Set the select command to fetch product details

                        productsAdapter.SelectCommand = new OracleCommand("SELECT " +

                              "Product_ID,Product_Name,Weight , Price FROM "+

                              " products WHERE product_id="+productID,

                              ConnectionManager.conn);

                       

                        //AddWithKey sets the Primary Key information to complete the

                        //schema information

                        productsAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

                       

                        if(safeType)

                        {

                              //Add Safe Mapping for Weight column so that it is retrieved

                              //as String type instead of default .NET type to avoid precision loss

                              productsAdapter.SafeMapping.Add("WEIGHT",typeof(string));

     

                              //Add Safe Mapping for Price column  so that it is retrieved

                              //as String type instead of default .NET type to avoid prcision loss

                              productsAdapter.SafeMapping.Add("PRICE",typeof(string));

                        }

                        //Instantiate DataSet object

                        detailsDataSet = new DataSet("DetailsDataSet");

 

                        //Fill the DataSet with data from 'Products' database table

                        productsAdapter.Fill(detailsDataSet, "Products");

               

                        // Get the row containing details of product

                        DataRow row =detailsDataSet.Tables["Products"].Rows[0];

 

                        // display the product details on form controls

                        lblID.Text =row["Product_ID"].ToString();

                        lblName.Text = row["Product_Name"].ToString();

                        txtWeight.Text = row["Weight"].ToString();

                        txtPrice.Text = row["Price"].ToString();

                  }

                  catch(Exception ex)

                  {

                        //Display error message

                        MessageBox.Show(ex.Message); 

                        return false;

                  }

 

                  return true;

            }

        

            /*****************************************************************

             * This method updates the details of products into the database. 

             * The  DataSet object is first edited to incorporate the changes

             * to product details and then this DataSet is used to update the

             * database table. Safe Type Mapping is used for "Weight" and

             * "Price" column to avoid precision loss while updating the values

             * into database.

            *****************************************************************/

            private void updateProductDetails()

            {

                  try

                  {

                        //get the Row to be updated

                        DataRow detailsRow =detailsDataSet.Tables[0].Rows.Find(productID);

                     

                        // check if user has made any changes to data values

                        if(txtWeight.Text.Equals(detailsRow["Weight"].ToString())

                              && txtPrice.Text.Equals(detailsRow["Price"].ToString()))

                        {

                              MessageBox.Show("No changes made");

                              return;

                        }

                        //Start the edit operation on the current row

                        detailsRow.BeginEdit();

                 

                        //Assigning the value of product weight

                        detailsRow["Weight"] = txtWeight.Text;

 

                        //Assigning the value of product price

                        detailsRow["Price"] = txtPrice.Text;

                 

                        //End the editing current row operation

                        detailsRow.EndEdit();

               

                        // update the changes in DataSet to database

                        productsAdapter.Update(detailsDataSet,"Products");

 

                        // message on successful updation.

                        MessageBox.Show("Update Successful");

                  }

                  catch(Exception e)

                  {

                        //Display error message

                        System.Windows.Forms.MessageBox.Show(e.Message);                       

                  }

            }

 

           

 

            /*************************************************************

             * This event is fired when "Update" button is clicked

             * It calls method to update changes to database.

             * ***********************************************************/

            private void cmdUpdate_Click(object sender, System.EventArgs e)

            {

                  // check if input data is valid

                  bool proceed =validateInput();

                  if(proceed)

                  { 

                        // update details to database

                        updateProductDetails();

                        // get the udpated details

                        getProductDetails(productID,safeType);

                  }

            }

 

            /***************************************************************

             * This method validates the user input before updating it to

             * database

             **************************************************************/

            private bool validateInput()

            {

                  //if weight of product is not entered

                  if(txtWeight.Text=="")

                  {

                        MessageBox.Show("Enter Product Weight");

                        return false;

                  }

                        // check if product weight is valid number

                  else if(txtWeight.Text!="")

                  {

                        try

                        {

                              //Parse the string to unsigned integer

                              double temp =System.Double.Parse(txtWeight.Text);

                              if(temp<=0)

                              {

                                    MessageBox.Show("Weight cannot be zero or negative");

                                    return false;

                              }

                        }

                        catch(Exception ne)

                        {

                              txtWeight.Text="";

                              MessageBox.Show("Enter valid Product Weight");

                              return false;

                        }

                  }

                  //if price of product is not entered

                  if(txtPrice.Text=="")

                  {

                        MessageBox.Show("Enter Product Price");

                        return false;

                  }

                        // check if product price is valid number

                  else if(txtPrice.Text!="")

                  {

                        try

                        {

                              //Parse the string to unsigned integer

                              double temp =System.Double.Parse(txtPrice.Text);

                              if(temp<=0)

                              {

                                    MessageBox.Show("Price cannot be zero or negative");

                                    return false;

                              }

                        }

                        catch(Exception ne)

                        {

                              txtPrice.Text="";

                              MessageBox.Show("Enter valid Product Price");

                              return false;

                        }

                  }

                  return true;

            }

 

            /*************************************************************

             * This event is fired when "Close" button is clicked

             * It closes the current form.

             * ***********************************************************/

            private void cmdClose_Click(object sender, System.EventArgs e)

            {

                  this.Close();

                 

            }

 

            #region Windows Form Designer generated code

            /// <summary>

            /// Required method for Designer support - do not modify

            /// the contents of this method with the code editor.

            /// </summary>

            private void InitializeComponent()

            {

                  this.lblProduct = new System.Windows.Forms.Label();

                  this.lblWeight = new System.Windows.Forms.Label();

                  this.lblPrice = new System.Windows.Forms.Label();

                  this.txtPrice = new System.Windows.Forms.TextBox();

                  this.cmdUpdate = new System.Windows.Forms.Button();

                  this.cmdClose = new System.Windows.Forms.Button();

                  this.lblName = new System.Windows.Forms.Label();

                  this.txtWeight = new System.Windows.Forms.TextBox();

                  this.lblPID = new System.Windows.Forms.Label();

                  this.lblID = new System.Windows.Forms.Label();

                  this.SuspendLayout();

                  //

                  // lblProduct

                  //

                  this.lblProduct.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.lblProduct.Location = new System.Drawing.Point(32, 56);

                  this.lblProduct.Name = "lblProduct";

                  this.lblProduct.Size = new System.Drawing.Size(104, 24);

                  this.lblProduct.TabIndex = 0;

                  this.lblProduct.Text = "Product Name";

                  //

                  // lblWeight

                  //

                  this.lblWeight.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.lblWeight.Location = new System.Drawing.Point(32, 112);

                  this.lblWeight.Name = "lblWeight";

                  this.lblWeight.Size = new System.Drawing.Size(80, 32);

                  this.lblWeight.TabIndex = 2;

                  this.lblWeight.Text = "Weight (g)";

                  //

                  // lblPrice

                  //

                  this.lblPrice.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.lblPrice.Location = new System.Drawing.Point(32, 160);

                  this.lblPrice.Name = "lblPrice";

                  this.lblPrice.Size = new System.Drawing.Size(64, 24);

                  this.lblPrice.TabIndex = 4;

                  this.lblPrice.Text = "Price ($)";

                  //

                  // txtPrice

                  //

                  this.txtPrice.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.txtPrice.Location = new System.Drawing.Point(136, 152);

                  this.txtPrice.MaxLength = 15;

                  this.txtPrice.Name = "txtPrice";

                  this.txtPrice.Size = new System.Drawing.Size(160, 23);

                  this.txtPrice.TabIndex = 5;

                  this.txtPrice.Text = "Price";

                  //

                  // cmdUpdate

                  //

                  this.cmdUpdate.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.cmdUpdate.Location = new System.Drawing.Point(136, 208);

                  this.cmdUpdate.Name = "cmdUpdate";

                  this.cmdUpdate.Size = new System.Drawing.Size(72, 24);

                  this.cmdUpdate.TabIndex = 6;

                  this.cmdUpdate.Text = "Update";

                  this.cmdUpdate.Click += new System.EventHandler(this.cmdUpdate_Click);

                  //

                  // cmdClose

                  //

                  this.cmdClose.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.cmdClose.Location = new System.Drawing.Point(216, 208);

                  this.cmdClose.Name = "cmdClose";

                  this.cmdClose.Size = new System.Drawing.Size(80, 24);

                  this.cmdClose.TabIndex = 7;

                  this.cmdClose.Text = "Close";

                  this.cmdClose.Click += new System.EventHandler(this.cmdClose_Click);

                  //

                  // lblName

                  //

                  this.lblName.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.lblName.Location = new System.Drawing.Point(144, 56);

                  this.lblName.Name = "lblName";

                  this.lblName.Size = new System.Drawing.Size(216, 24);

                  this.lblName.TabIndex = 8;

                  this.lblName.Text = "Product Name";

                  //

                  // txtWeight

                  //

                  this.txtWeight.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.txtWeight.Location = new System.Drawing.Point(136, 104);

                  this.txtWeight.MaxLength = 38;

                  this.txtWeight.Name = "txtWeight";

                  this.txtWeight.Size = new System.Drawing.Size(160, 23);

                  this.txtWeight.TabIndex = 9;

                  this.txtWeight.Text = "Weight";

                  //

                  // lblPID

                  //

                  this.lblPID.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.lblPID.Location = new System.Drawing.Point(32, 16);

                  this.lblPID.Name = "lblPID";

                  this.lblPID.TabIndex = 10;

                  this.lblPID.Text = "Product ID";

                  //

                  // lblID

                  //

                  this.lblID.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

                  this.lblID.Location = new System.Drawing.Point(144, 16);

                  this.lblID.Name = "lblID";

                  this.lblID.Size = new System.Drawing.Size(120, 24);

                  this.lblID.TabIndex = 11;

                  this.lblID.Text = "Product ID";

                  //

                  // ProductDetails

                  //

                  this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

                  this.ClientSize = new System.Drawing.Size(336, 253);

                  this.Controls.AddRange(new System.Windows.Forms.Control[] {

                                                                                                              this.lblID,

                                                                                                              this.lblPID,

                                                                                                              this.txtWeight,

                                                                                                              this.lblName,

                                                                                                              this.cmdClose,

                                                                                                              this.cmdUpdate,

                                                                                                              this.txtPrice,

                                                                                                              this.lblPrice,

                                                                                                              this.lblWeight,

                                                                                                              this.lblProduct});

                  this.Name = "ProductDetails";

                  this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

                  this.Text = "Product Details";

                  this.ResumeLayout(false);

 

            }

            #endregion

 

            /// <summary>

            /// Clean up any resources being used.

            /// </summary>

            protected override void Dispose( bool disposing )

            {

                  if( disposing )

                  {

                        if (components != null)

                        {

                              components.Dispose();

                        }

                  }

                  base.Dispose( disposing );

            }

           

      }    

}

 

E-mail this page
Printer View Printer View
Oracle Is The Information Company About Oracle | Oracle RSS Feeds | Careers | Contact Us | Site Maps | Legal Notices | Terms of Use | Privacy