Solved

I am trying to create desktop application using C# to Read Call information for Panasonic PBX, are ther any sample code?

Posted on 2007-11-26
9
1,182 Views
Last Modified: 2012-06-27
I am trying to create desktop application using C# to Read Call information, just i need dat and duration and extintion number for Panasonic PBX, are ther any sample code to learn how to access the port and read this data? also the pin assignment i think it may be like that for searial port:
2------------------------3
3-----------------------2
4-----------------------6
5-----------------------5
6-----------------------4
7-----------------------8
8-----------------------7
0
Comment
Question by:alaamh77
  • 5
  • 4
9 Comments
 
LVL 12

Expert Comment

by:topdog770
ID: 20350162
This sample won't compile, but it's a fairly complete example of how I did  a serial port to PBX app a long time ago, so the coding style is a bit rough.  Let me know if you have questions.

    public delegate void AppReceivedSerialDataDelegate( string Data );
    public partial class FormMain : Form
    {
        public static event AppReceivedSerialDataDelegate AppReceivedDataEvent;

        SerialPort serialPort = new SerialPort( "COM1", 300, Parity.Even, 7, StopBits.One );

        private FormSerialData formSerialData = new FormSerialData( );

        RawDataProcessor rawDataProcessor = new RawDataProcessor( );

        bool bInErrorCondition = false;

        public FormMain()
        {
            InitializeComponent( );

            if (this.developmentToolStripMenuItem != null)
            {
                this.developmentToolStripMenuItem.Visible = BWCDbInfo.IsBWCDEV_DatabaseAvailable( );
            }

            serialPort.ErrorReceived += new SerialErrorReceivedEventHandler( serialPort_ErrorReceived );
            serialPort.DataReceived += new SerialDataReceivedEventHandler( serialPort_DataReceived );
            serialPort.PinChanged += new SerialPinChangedEventHandler( serialPort_PinChanged );
        }

        private void ApplyStartupSettings()
        {
            BwcConfig.ReadRegistryStartUpOptions( );

            if (BwcConfig.MainFormStartMaximized == true)
            {

            }
            else
            {
                this.Top = BwcConfig.MainFormTop;
                this.Left = BwcConfig.MainFormLeft;
                this.Width = BwcConfig.MainFormWidth;
                this.Height = BwcConfig.MainFormHeight;
            }

            if (!BWCDbInfo.IsBWCDEV_DatabaseAvailable( )
                && BwcConfig.CurrentDbInfo.ActiveDB == BWCDatabaseLocations.DEVBWC)
            {
                // if the current user no longer has access to the development database and
                // it was the database they last used... load the production db instead
                BwcConfig.CurrentDbInfo.ActiveDB = BWCDatabaseLocations.OFFBWC;
            }
            this.ConfigureCommPort( );
        }

        bool bCloseApplicationPerformed = false;
        private void CloseApplication()
        {
            if (!bCloseApplicationPerformed)
            {
                bCloseApplicationPerformed = true;
                BwcConfig.WriteRegistryStartUpOptions( );

                if (this.serialPort != null && this.serialPort.IsOpen)
                {
                    serialPort.Close( );
                }

                Error.SendEmailMessage( "CallCap Application Was Closed", "The CallCap application was intentionally closed by an user" );
                Application.Exit( );
            }
        }


        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            DataSet ds = new DataSet();
            ds.Tables.Add( DbWriter.ErrorTable.Copy() );
            ds.WriteXml( DbWriter.LogFile );
            this.CloseApplication( );
        }

        public void Init()
        {
            this.Text = BwcConfig.ApplicationName;

            ApplyStartupSettings( );

            formSerialData.TopLevel = false;
            formSerialData.Dock = DockStyle.Fill;

            FormMain.dtAppStartTime = DateTime.Now;
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            try
            {              
                Init();
                formSerialData.Show( );
                Application.DoEvents( );

                Go( );          
            }
            catch (Exception ex)
            {
                Error.SendEmailMessage( "CallCap Error", "Error Starting Application\r\n" + ex.Message + "\r\n" + ex.StackTrace );
            }
            finally
            {
               
            }
        }

        void serialPort_PinChanged(object sender, SerialPinChangedEventArgs e)
        {
            this.bInErrorCondition = true;

            if (serialPort.IsOpen )
            {
                serialPort.Close( );
            }

            Error.SendEmailMessage( "Call Capp Serial Error", "The connection from Call Cap to the PBX was broken" );

            this.Go( );
        }

        void serialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
        {
            throw new Exception( "The method or operation is not implemented." );
        }

        void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                DoUpdate( sender, e );
            }
            catch (Exception ex)
            {
                bInErrorCondition = true;
                Error.SendEmailMessage( "Call Cap Error", "Communication to PBX was lost while reading from the Serial Port" );
                this.Go( );
            }
        }

        static string sDataFromSerialPort = "";

        private void DoUpdate(object s, EventArgs e)
        {
            if (InvokeRequired)
            {
                this.BeginInvoke( new EventHandler( DoUpdate ) );
            }
            else
            {
                this.DisplayProgramActivity( "Getting Data!" );
                this.statusStrip1.Refresh( );
                sDataFromSerialPort = serialPort.ReadExisting( );

                if (sDataFromSerialPort.Length > 0 && AppReceivedDataEvent != null)
                {
                    AppReceivedDataEvent( sDataFromSerialPort );
                }
            }
        }

        private void cOMMPORT1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ChangeCommPort( 1 );
        }

        private void cOMMPORT2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ChangeCommPort( 2 );
        }

        private void cOMMPORT3ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ChangeCommPort( 3 );
        }

        private void cOMMPORT4ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ChangeCommPort( 4 );
        }

        private void ChangeCommPort(int iPortNumber)
        {
            if (this.serialPort.IsOpen )
            {
                serialPort.Close( );
            }
            BwcConfig.CommPort = "COM" + iPortNumber.ToString( );
            serialPort.PortName = BwcConfig.CommPort;
            this.Go( );
        }

        private void ConfigureCommPort()
        {
            //serialPort.Handshake = Handshake.RequestToSend;

            serialPort.BaudRate = 300;
            serialPort.DtrEnable = true;      // change to true
            serialPort.RtsEnable = false; // change to true
            serialPort.Encoding = new System.Text.ASCIIEncoding( );

            serialPort.ReadTimeout = 100;
            serialPort.ReceivedBytesThreshold = 1;
            serialPort.Parity = Parity.Even;
            serialPort.DataBits = 7;
            serialPort.StopBits = StopBits.One;
            serialPort.Handshake = Handshake.None;
            serialPort.ReadBufferSize = 1024;
            serialPort.PortName = BwcConfig.CommPort;
        }
       
        static DateTime dtStartOfLastGo;

        private void Go()
        {
            dtStartOfLastGo = DateTime.Now;

            try
            {
                DisplayProgramActivity( "Starting communication process" );

                bool bError = true;

                if (serialPort.IsOpen)
                {
                    bError = false;
                    return;
                }

                DisplayProgramActivity( "Opening Serial Port " + serialPort.PortName );
                serialPort.Open( );

                DisplayProgramActivity( "Serial Port " + serialPort.PortName + " opened" );

                DisplayProgramActivity( "Checking for logged calls" );
                DataSet ds = new DataSet( );
                ds.ReadXml( DbWriter.LogFile );

                DisplayProgramActivity( "Recovered " + ds.Tables.Count.ToString( ) + " logged calls" );
                if (ds.Tables.Count > 0)
                {
                    PhoneData.PHO_PHONE_CALLSDataTable dt = (PhoneData.PHO_PHONE_CALLSDataTable)ds.Tables[ 0 ];
                    foreach (PhoneData.PHO_PHONE_CALLSRow row in dt.Rows)
                    {
                        ((PhoneData.PHO_PHONE_CALLSDataTable)(this.formSerialData.dg.DataSource)).Rows.Add( row );

                    }
                }

                DisplayProgramActivity( "Finished checking for logged calls" );

                DisplayProgramActivity( "Communicating with the PBX" );
                SignalPBX_StartDataFeed( );

                if (bInErrorCondition == true)
                {
                    // this time it succeeded, send out an email notifying users that we are working again!
                    Error.SendEmailMessage( "CallCap Resumed Operation", "Program is now monitoring calls");
                }
                bInErrorCondition = false;
            }
            catch (Exception ex)
            {
                DisplayProgramActivity( ex.Message );

                if (bInErrorCondition == false)
                {
                    bInErrorCondition = true;
                    Error.SendEmailMessage( "CallCap Error", ex.Message + "\r\n" + ex.StackTrace );
                }
            }
        }

        bool SignalPBX_StartDataFeed()
        {
            try
            {
                DisplayProgramActivity( "Signaling PBX to Start" );
                // --------------------------------
                // Display Program Activity

                // Send DS2 (char)18 to signal PBX we
                // are ready to receive data

                char c18 = (char)18;
                char [] ar = { c18, '\0' };
                this.serialPort.Write( ar, 0, ar.Length );
                System.Threading.Thread.Sleep( 500 );
            }
            catch (Exception ex)
            {
                Error.SendEmailMessage( "CallCap Error", "Error Starting Communications With Serial Port\r\n" + ex.Message + "\r\n" + ex.StackTrace );
            }

            return true;
        }

        bool SignalPBX_StopDataFeed()
        {
              DisplayProgramActivity("Signaling PBX to Stop");      
              // --------------------------------
              // Display Program Activity

            // Send DS2 (char)18 to signal PBX we
            // are ready to receive data
            serialPort.WriteLine( BwcConfig.SERIAL_PORT_STOP_CHAR.ToString() );
            System.Threading.Thread.Sleep( 500 );

            return true;
        }
    }
0
 

Author Comment

by:alaamh77
ID: 20353007
Dear
How i can extract information to save into it database from this line, i need call duration and caller number
this.serialPort.Write(ar, 0, ar.Length);

and what is this:
FormSerialData , RawDataProcessor

i know i am asking you more than one point, sorry.
Thanks
0
 
LVL 12

Expert Comment

by:topdog770
ID: 20353098
Ok, it's a bit messy but here's the remaining, primary code, it show how I was pulling out the specific pieces of data from the serial data and writing it into the the database
    public class RawDataProcessor

    {

        private string _sCleanDataString = "";

        public static event AppReceivedSerialDataDelegate ProcessedDataStringEvent;
 

        public RawDataProcessor()

        {

            FormMain.AppReceivedDataEvent += new AppReceivedSerialDataDelegate( FormMain_AppReceivedDataEvent );

        }
 

        void FormMain_AppReceivedDataEvent(string Data)

        {

            foreach (char c in Data.ToCharArray( ))

            {

                if (c > 31 && c < 127)

                {

                    _sCleanDataString += c.ToString( );

                }
 

                if (c == 13) // end of transmit string

                {

                    _sCleanDataString = _sCleanDataString.Trim( );

                    if (ProcessedDataStringEvent != null && _sCleanDataString.Length > 1 && _sCleanDataString != "PRINTER FAIL")

                    {

                        ProcessedDataStringEvent( _sCleanDataString );

                    }

                    _sCleanDataString = "";

                }

            }

        }

    }
 
 

    public partial class FormSerialData : Form

    {

        /// <summary>

        /// Required designer variable.

        /// </summary>

        private System.ComponentModel.IContainer components = null;
 

        /// <summary>

        /// Clean up any resources being used.

        /// </summary>

        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>

        protected override void Dispose(bool disposing)

        {

            if (disposing && (components != null))

            {

                components.Dispose( );

            }

            base.Dispose( disposing );

        }
 

        #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.dg = new System.Windows.Forms.DataGridView( );

            this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn( );

            this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn( );

            this.Column8 = new System.Windows.Forms.DataGridViewTextBoxColumn( );

            this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn( );

            this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn( );

            this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn( );

            this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn( );

            this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn( );

            ((System.ComponentModel.ISupportInitialize)(this.dg)).BeginInit( );

            this.SuspendLayout( );

            // 

            // dg

            // 

            this.dg.AllowUserToAddRows = false;

            this.dg.AllowUserToDeleteRows = false;

            this.dg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)

                        | System.Windows.Forms.AnchorStyles.Left)

                        | System.Windows.Forms.AnchorStyles.Right)));

            this.dg.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;

            this.dg.Columns.AddRange( new System.Windows.Forms.DataGridViewColumn[] {

            this.Column1,

            this.Column2,

            this.Column8,

            this.Column3,

            this.Column4,

            this.Column5,

            this.Column6,

            this.Column7} );

            this.dg.Location = new System.Drawing.Point( 23, 22 );

            this.dg.Name = "dg";

            this.dg.RowHeadersVisible = false;

            this.dg.Size = new System.Drawing.Size( 571, 196 );

            this.dg.TabIndex = 0;

            this.dg.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler( this.dg_RowsAdded );

            // 

            // Column1

            // 

            this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;

            this.Column1.DataPropertyName = "CALL_DATE_TIME";

            this.Column1.FillWeight = 6F;

            this.Column1.HeaderText = "Time";

            this.Column1.Name = "Column1";

            this.Column1.ReadOnly = true;

            this.Column1.Resizable = System.Windows.Forms.DataGridViewTriState.False;

            this.Column1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

            this.Column1.Width = 36;

            // 

            // Column2

            // 

            this.Column2.DataPropertyName = "EXTENSION";

            this.Column2.HeaderText = "Ext";

            this.Column2.Name = "Column2";

            this.Column2.ReadOnly = true;

            this.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.False;

            this.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

            // 

            // Column8

            // 

            this.Column8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;

            this.Column8.DataPropertyName = "DURATION";

            this.Column8.HeaderText = "Call Duration";

            this.Column8.Name = "Column8";

            this.Column8.ReadOnly = true;

            this.Column8.Resizable = System.Windows.Forms.DataGridViewTriState.False;

            this.Column8.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

            this.Column8.Width = 73;

            // 

            // Column3

            // 

            this.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;

            this.Column3.DataPropertyName = "TRUNK";

            this.Column3.HeaderText = "Trunk";

            this.Column3.Name = "Column3";

            this.Column3.ReadOnly = true;

            this.Column3.Resizable = System.Windows.Forms.DataGridViewTriState.False;

            this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

            this.Column3.Width = 41;

            // 

            // Column4

            // 

            this.Column4.DataPropertyName = "PRE_CODE";

            this.Column4.HeaderText = "PreCode";

            this.Column4.Name = "Column4";

            this.Column4.ReadOnly = true;

            this.Column4.Resizable = System.Windows.Forms.DataGridViewTriState.False;

            this.Column4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

            // 

            // Column5

            // 

            this.Column5.DataPropertyName = "AREA_CODE";

            this.Column5.HeaderText = "Area Code";

            this.Column5.Name = "Column5";

            this.Column5.ReadOnly = true;

            this.Column5.Resizable = System.Windows.Forms.DataGridViewTriState.False;

            this.Column5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

            // 

            // Column6

            // 

            this.Column6.DataPropertyName = "PREFIX";

            this.Column6.HeaderText = "Prefix";

            this.Column6.Name = "Column6";

            this.Column6.ReadOnly = true;

            this.Column6.Resizable = System.Windows.Forms.DataGridViewTriState.False;

            this.Column6.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

            // 

            // Column7

            // 

            this.Column7.DataPropertyName = "SUFFIX";

            this.Column7.HeaderText = "Suffix";

            this.Column7.Name = "Column7";

            this.Column7.ReadOnly = true;

            this.Column7.Resizable = System.Windows.Forms.DataGridViewTriState.False;

            this.Column7.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

            // 

            // FormSerialData

            // 

            this.ClientSize = new System.Drawing.Size( 617, 241 );

            this.ControlBox = false;

            this.Controls.Add( this.dg );

            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

            this.Name = "FormSerialData";

            this.Load += new System.EventHandler( this.FormSerialData_Load );

            ((System.ComponentModel.ISupportInitialize)(this.dg)).EndInit( );

            this.ResumeLayout( false );
 

        }
 

        #endregion
 

        public System.Windows.Forms.DataGridView dg;

        private System.Windows.Forms.DataGridViewTextBoxColumn Column1;

        private System.Windows.Forms.DataGridViewTextBoxColumn Column2;

        private System.Windows.Forms.DataGridViewTextBoxColumn Column8;

        private System.Windows.Forms.DataGridViewTextBoxColumn Column3;

        private System.Windows.Forms.DataGridViewTextBoxColumn Column4;

        private System.Windows.Forms.DataGridViewTextBoxColumn Column5;

        private System.Windows.Forms.DataGridViewTextBoxColumn Column6;

        private System.Windows.Forms.DataGridViewTextBoxColumn Column7;
 

        PhoneData.PHO_PHONE_CALLSDataTable _dtPhoneCalls = new PhoneData.PHO_PHONE_CALLSDataTable( );
 
 

        public FormSerialData()

        {

            InitializeComponent( );
 

            dg.DataSource = _dtPhoneCalls;

        }
 

        private void FormSerialData_Load(object sender, EventArgs e)

        {

            RawDataProcessor.ProcessedDataStringEvent +=new AppReceivedSerialDataDelegate(RawDataProcessor_ProcessedDataStringEvent);

        }
 

        void RawDataProcessor_ProcessedDataStringEvent(string Data)

        {

            AddToDataGrid( Data );

        }
 

        void AddToDataGrid(string source)

        {

            if (source.Length < 54)

            {

                return;

            }
 

            DateTime dt = DateTime.Now;
 

            int iHours = 0;

            int iMinutes = 0;
 

            string sTime = source.Substring( 0, 5 );
 

            string sHours = source.Substring( 0, 2 );

            string sMinutes = source.Substring( 3, 2 );

            if (sHours.Length > 0)

            {

                try

                {

                    iHours = Convert.ToInt32( sHours );

                }

                catch

                {

                }

            }
 

            if (sMinutes.Length > 0)

            {

                try

                {

                    iMinutes = Convert.ToInt32( sMinutes );

                }

                catch

                {

                }

            }
 

            PhoneData.PHO_PHONE_CALLSRow r = _dtPhoneCalls.NewPHO_PHONE_CALLSRow( );
 

            DateTime logTime = new DateTime( DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,

                                             iHours, iMinutes, DateTime.Now.Second );

            r.CALL_DATE_TIME = logTime;

            r.EXTENSION = source.Substring( 18, 3 );
 

            decimal duration = 0M;

            string sDuration = "";

            try

            {

                decimal hr = 0;

                decimal min = 0;

                decimal sec = 0;
 

                string sDuration_Hours = source.Substring( 6, 2 );

                string sDuration_Minutes = source.Substring( 9, 2 );

                string sDuration_Seconds = source.Substring( 13, 2 );
 

                if (sDuration_Hours.Length > 0)

                {

                    hr = Convert.ToDecimal( sDuration_Hours );

                    sDuration += String.Format("{0} hour(s), ", hr );

                }

                if (sDuration_Minutes.Length > 0)

                {

                    min = Convert.ToDecimal( sDuration_Minutes );

                    sDuration += String.Format("{0} min(s), ", min );

                }

                if (sDuration_Seconds.Length > 0)

                {

                    sec = Convert.ToDecimal( sDuration_Seconds );

                    if( sec > 0 )

                    {

                        sDuration += String.Format( "{0} seconds, ", sec );

                        sec *= 0.1M;                        

                    }

                }
 

                hr = hr * 60;

                min += hr;

                duration = min + sec;

            }

            catch

            {

            }
 

            r.DURATION = duration;

            r.TRUNK = source.Substring( 23, 5 );

            //string sPreCode = source.Substring( 28, 1 );
 

            r.PRE_CODE = source.Substring( 43, 1 );

            r.AREA_CODE = source.Substring( 44, 3 );

            r.PREFIX = source.Substring( 47, 3 );

            r.SUFFIX = source.Substring( 50, 4 );
 
 

            if (r.AREA_CODE == "900")

            {

                string sMessage = "The call was made at " + r.CALL_DATE_TIME.ToLongTimeString() + " from extension (" + r.EXTENSION + ") on trunk (" + r.TRUNK + ")." + "\r\nThe call duration was " + sDuration;

                sMessage += "\r\nThe number called was (" + r.AREA_CODE + ") " + r.PREFIX + "-" + r.SUFFIX;

                Error.Send900Message( sMessage );

            }
 

            try

            {

                this._dtPhoneCalls.AddPHO_PHONE_CALLSRow( r );

            }

            catch (Exception ex)

            {

                Error.SendEmailMessage( "Non-Critical CallCap Error", "Error Adding Phone Record Row\r\n" + ex.Message + "\r\n" + ex.StackTrace );

            }

        }
 

        private void dg_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)

        {

            for (int a = 0; a < e.RowCount; a++)

            {

                PhoneData.PHO_PHONE_CALLSRow r = _dtPhoneCalls.Rows[ e.RowIndex + a ] as PhoneData.PHO_PHONE_CALLSRow;

                if (r != null)

                {

                    DbWriter.Write( r );

                }

            }
 

            if (_dtPhoneCalls.Rows.Count > 25)

            {

                _dtPhoneCalls.Rows.Clear( );

            }

        }

    }
 
 

    class DbWriter

    {

        public static readonly string LogFile = "UnwrittenCalls.xml";
 

        static readonly string sql = @"INSERT INTO pho_phone_calls 

	      (call_date_time, extension, duration, trunk, 

	      pre_code, area_code, prefix, suffix) 

	      VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
 

        public static PhoneData.PHO_PHONE_CALLSDataTable ErrorTable = new PhoneData.PHO_PHONE_CALLSDataTable( );

    

        static OleDbCommand cmd = new OleDbCommand( sql );

        static OleDbConnection conn = new OleDbConnection( );

        

        public static bool Write(PhoneData.PHO_PHONE_CALLSRow row)

        {          

            if (row == null)

            {

                return false;

            }
 

            try

            {

                if (!cmd.Parameters.Contains( "call_date_time" ))

                {

                    cmd.Parameters.Add( new OleDbParameter( "call_date_time", row.CALL_DATE_TIME ) );

                }

                else

                {

                    cmd.Parameters[ "call_date_time" ].Value = row.CALL_DATE_TIME;

                }
 

                if (!cmd.Parameters.Contains( "extension" ))

                {

                    cmd.Parameters.Add( new OleDbParameter( "extension", row.EXTENSION ) );

                }

                else

                {

                    cmd.Parameters[ "extension" ].Value = row.EXTENSION;

                }
 

                if (!cmd.Parameters.Contains( "duration" ))

                {

                    cmd.Parameters.Add( new OleDbParameter( "duration", row.DURATION ) );

                }

                else

                {

                    cmd.Parameters[ "duration" ].Value = row.DURATION;

                }
 

                if (!cmd.Parameters.Contains( "trunk" ))

                {

                    cmd.Parameters.Add( new OleDbParameter( "trunk", row.TRUNK ) );

                }

                else

                {

                    cmd.Parameters[ "trunk" ].Value = row.TRUNK;

                }
 

                if (!cmd.Parameters.Contains( "pre_code" ))

                {

                    cmd.Parameters.Add( new OleDbParameter( "pre_code", row.PRE_CODE ) );

                }

                else

                {

                    cmd.Parameters[ "pre_code" ].Value = row.PRE_CODE;

                }
 

                if (!cmd.Parameters.Contains( "area_code" ))

                {

                    cmd.Parameters.Add( new OleDbParameter( "area_code", row.AREA_CODE ) );

                }

                else

                {

                    cmd.Parameters[ "area_code" ].Value = row.AREA_CODE;

                }
 

                if (!cmd.Parameters.Contains( "prefix" ))

                {

                    cmd.Parameters.Add( new OleDbParameter( "prefix", row.PREFIX ) );

                }

                else

                {

                    cmd.Parameters[ "prefix" ].Value = row.PREFIX;

                }
 

                if (!cmd.Parameters.Contains( "suffix" ))

                {

                    cmd.Parameters.Add( new OleDbParameter( "suffix", row.SUFFIX ) );

                }

                else

                {

                    cmd.Parameters[ "suffix" ].Value = row.SUFFIX;

                }
 

                System.Diagnostics.Debug.Assert( cmd.Parameters.Count == 8, "Incorrect Parameter Count in DbWriter.Write" );
 

                OleDbConnection conn = new OleDbConnection( BwcConfig.CurrentDbInfo.ConnectionString );

                conn.Open( );

                cmd.Connection = conn;

                cmd.ExecuteNonQuery( );

                conn.Close( );

                return true;

            }

            catch (OleDbException dbex)

            {

                int iErrorCode = dbex.ErrorCode;

                Type e = dbex.GetType( );

                DbWriter.ErrorTable.ImportRow( row );

                Error.SendEmailMessage("Writing to Database failed", "The current db is: " + BwcConfig.CurrentDbInfo.ActiveDB.ToString() + ".\r\n" + dbex.Message + "\r\n" + dbex.StackTrace);

            }

            catch (Exception ex)

            {

                Type e = ex.GetType( );

                DbWriter.ErrorTable.ImportRow( row );

                Error.SendEmailMessage("Writing to Database failed", "The current db is: " + BwcConfig.CurrentDbInfo.ActiveDB.ToString() + ".\r\n" + ex.Message + "\r\n" + ex.StackTrace);

            }

            finally

            {

                if( conn != null && conn.State == ConnectionState.Open  )

                {

                    conn.Close( );

                }

            }

            return false;

        }    

    }
 
 

        public partial class PHO_PHONE_CALLSDataTable : System.Data.DataTable, System.Collections.IEnumerable {

            

            private System.Data.DataColumn columnCALL_DATE_TIME;

            

            private System.Data.DataColumn columnEXTENSION;

            

            private System.Data.DataColumn columnDURATION;

            

            private System.Data.DataColumn columnTRUNK;

            

            private System.Data.DataColumn columnPRE_CODE;

            

            private System.Data.DataColumn columnAREA_CODE;

            

            private System.Data.DataColumn columnPREFIX;

            

            private System.Data.DataColumn columnSUFFIX;

            

            [System.Diagnostics.DebuggerNonUserCodeAttribute()]

            public PHO_PHONE_CALLSDataTable() {

                this.TableName = "PHO_PHONE_CALLS";

                this.BeginInit();

                this.InitClass();

                this.EndInit();

            }
 

            private void InitClass() {

                this.columnCALL_DATE_TIME = new System.Data.DataColumn("CALL_DATE_TIME", typeof(System.DateTime), null, System.Data.MappingType.Element);

                base.Columns.Add(this.columnCALL_DATE_TIME);

                this.columnEXTENSION = new System.Data.DataColumn("EXTENSION", typeof(string), null, System.Data.MappingType.Element);

                base.Columns.Add(this.columnEXTENSION);

                this.columnDURATION = new System.Data.DataColumn("DURATION", typeof(decimal), null, System.Data.MappingType.Element);

                base.Columns.Add(this.columnDURATION);

                this.columnTRUNK = new System.Data.DataColumn("TRUNK", typeof(string), null, System.Data.MappingType.Element);

                base.Columns.Add(this.columnTRUNK);

                this.columnPRE_CODE = new System.Data.DataColumn("PRE_CODE", typeof(string), null, System.Data.MappingType.Element);

                base.Columns.Add(this.columnPRE_CODE);

                this.columnAREA_CODE = new System.Data.DataColumn("AREA_CODE", typeof(string), null, System.Data.MappingType.Element);

                base.Columns.Add(this.columnAREA_CODE);

                this.columnPREFIX = new System.Data.DataColumn("PREFIX", typeof(string), null, System.Data.MappingType.Element);

                base.Columns.Add(this.columnPREFIX);

                this.columnSUFFIX = new System.Data.DataColumn("SUFFIX", typeof(string), null, System.Data.MappingType.Element);

                base.Columns.Add(this.columnSUFFIX);

                this.Constraints.Add(new System.Data.UniqueConstraint("Constraint1", new System.Data.DataColumn[] {

                                this.columnCALL_DATE_TIME,

                                this.columnEXTENSION}, true));

                this.columnCALL_DATE_TIME.AllowDBNull = false;

                this.columnEXTENSION.AllowDBNull = false;

                this.columnEXTENSION.MaxLength = 3;

                this.columnTRUNK.MaxLength = 6;

                this.columnPRE_CODE.MaxLength = 6;

                this.columnAREA_CODE.MaxLength = 3;

                this.columnPREFIX.MaxLength = 3;

                this.columnSUFFIX.AllowDBNull = false;

                this.columnSUFFIX.MaxLength = 4;

            }
 

}

Open in new window

0
 

Author Comment

by:alaamh77
ID: 20355969
Dear
Thanks very mush for this solution, i have little qustion, what about the variable "PhoneData"
Thanks
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:alaamh77
ID: 20355995
Dear
also i see BwcConfig but i need to know more about it
Thanks
0
 
LVL 12

Expert Comment

by:topdog770
ID: 20358874
The PhoneData object is my typed dataset.  I included part of the code at the bottom so  you could see the columns that made up the PHO_PHONE_CALLSDataTable.

The BwcConfig is my object that stores configuration and application settings information.
0
 

Author Comment

by:alaamh77
ID: 20359257
Dear
i search the code again but i didn't see the part that decleare dataset PHO_PHONE_CALLSDataTable,
also if you can let me know the structure of BwcConfig because you do new idea to me.

thanks
0
 
LVL 12

Accepted Solution

by:
topdog770 earned 500 total points
ID: 20362425
Yeah, i just added the  public partial class PHO_PHONE_CALLSDataTable which shows what columns and the column types;

I'm including the BwcConfig class it's a very simple wrapper to store configuration stuff.
    public static class BwcConfig

    {

        public static readonly string ApplicationName = "MillOrder";
 

        public static bool MainFormStartMaximized = true;

        public static int MainFormLeft = 0;

        public static int MainFormTop = 0;

        public static int MainFormWidth = 0;

        public static int MainFormHeight = 0;
 

        public static bool MainFormLeftPanelShowExpanded = true;

        public static int MainFormLeftPanelWidth = 120;
 

        public static readonly string RegistryKey = @"Software\BRIGHT WOOD\" + ApplicationName.ToUpper( );

        public static BWCDbInfo CurrentDbInfo = new BWCDbInfo( BWCDatabaseLocations.OFFBWC ); 
 
 

        public static void ReadRegistryStartUpOptions()

        {

            RegistryKey regKey = Registry.CurrentUser.CreateSubKey( BwcConfig.RegistryKey );
 

            try

            {

                string sTempActiveDB = regKey.GetValue( "Current_Database", CurrentDbInfo.ActiveDB ).ToString( );

                CurrentDbInfo.ActiveDB = CurrentDbInfo.StringToLocationEnum( sTempActiveDB );
 

                MainFormStartMaximized = ((int)regKey.GetValue( "Startup_ShowMaximized", 1 ) != 0 ? true : false);
 

                // store main form size & position values

                MainFormLeft = Convert.ToInt32( regKey.GetValue( "MainForm_WindowPos_Left", MainFormLeft ) );

                MainFormTop = Convert.ToInt32( regKey.GetValue( "MainForm_WindowPos_Top", MainFormTop ) );

                MainFormWidth = Convert.ToInt32( regKey.GetValue( "MainForm_WindowPos_Width", MainFormWidth ) );

                MainFormHeight = Convert.ToInt32( regKey.GetValue( "MainForm_WindowPos_Height", MainFormHeight ) );
 

                MainFormLeftPanelShowExpanded = ((int)regKey.GetValue( "MainForm_Panel1_ShowExpanded", MainFormLeftPanelShowExpanded ) != 0 ? true : false);

                MainFormLeftPanelWidth = Convert.ToInt32( regKey.GetValue( "MainForm_Panel1_Width", MainFormLeftPanelWidth ) );

            }

            catch (Exception e)

            {

                string s = e.Message;

            }

            regKey.Close( );

        }
 

        public static void WriteRegistryStartUpOptions()

        {

            RegistryKey regKey = Registry.CurrentUser.CreateSubKey( BwcConfig.RegistryKey );
 

            try

            {

                regKey.SetValue( "Current_Database", CurrentDbInfo.ActiveDB.ToString( ) );
 

                regKey.SetValue( "Startup_ShowMaximized", MainFormStartMaximized == true ? 1 : 0 );
 

                // store main form size & position values

                regKey.SetValue( "MainForm_WindowPos_Left", MainFormLeft );

                regKey.SetValue( "MainForm_WindowPos_Top", MainFormTop );

                regKey.SetValue( "MainForm_WindowPos_Width", MainFormWidth );

                regKey.SetValue( "MainForm_WindowPos_Height", MainFormHeight );
 

                regKey.SetValue( "MainForm_Panel1_ShowExpanded", MainFormLeftPanelShowExpanded == true ? 1 : 0 );

                regKey.SetValue( "MainForm_Panel1_Width", MainFormLeftPanelWidth );
 

                regKey.Close( );

            }

            catch

            {
 

            }

        }
 

        public static string MoConnectionString

        {

            get

            {

                return CurrentDbInfo.MoConnectionString;

            }

        }
 

        public static string AckConnectionString

        {

            get

            {

                return CurrentDbInfo.AckConnectionString;

            }

        }

    }

Open in new window

0
 

Author Closing Comment

by:alaamh77
ID: 31410944
Thanks Mr. topdog770
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Extention Methods in C# 3.0 by Ivo Stoykov C# 3.0 offers extension methods. They allow extending existing classes without changing the class's source code or relying on inheritance. These are static methods invoked as instance method. This…
Article by: Ivo
C# And Nullable Types Since 2.0 C# has Nullable(T) Generic Structure. The idea behind is to allow value type objects to have null values just like reference types have. This concerns scenarios where not all data sources have values (like a databa…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

747 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now