Solved

Need a real exemlpe in using Microsoft.ApplicaitonBlock.ConfigurationManager

Posted on 2004-08-05
20
382 Views
Last Modified: 2012-06-27
The help file is not very clear.

I would like to read write to a XML Config File.
Encrypted if it is easy to achieve.

But I really want to use the application block because it will be more complicated in the future.
For now, I just try to understand with a small config.

If you need more info let me know.
0
Comment
  • 10
  • 7
  • 2
  • +1
20 Comments
 
LVL 69

Expert Comment

by:Éric Moreau
ID: 11728067
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11728116
Thank you but this is not was I am looking for.
Need a real exemlpe in using Microsoft.ApplicationBlock.ConfigurationManagement.
0
 
LVL 69

Expert Comment

by:Éric Moreau
ID: 11728331
I am not sure that this AB gives all the features you request. That's why I gave you this other link.
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11728342
ok. Thank anyway.
0
 
LVL 8

Expert Comment

by:vinhnl
ID: 11728742
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11729121
Thank but this is not what I am looking for.
This page list the ApplicationBlock's pachage content.  So I already have that.
0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 11729260
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/cmab.asp

includes some information on use ....


yes the configuration management block does all of this ...



btw:

look where you installed it ...
"The download also contains the following QuickStart projects:

Microsoft.ApplicationBlocks.ConfigurationManagement.Quickstarts.Read
This QuickStart shows how to read data from a variety of data stores using the Configuration Management Application Block.

Microsoft.ApplicationBlocks.ConfigurationManagement.Quickstarts.Write
This QuickStart shows how to write data to a variety of data stores using the Configuration Management Application Block.

Microsoft.ApplicationBlocks.ConfigurationManagement.Quickstarts.Hashtable
This QuickStart demonstrates the special support built into the Configuration Management Application Block for application configuration data stored in Hashtable objects. "
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11729448
Thank but again, I am lost with the exemple from the application block.
The code required to retreive a field is bigger than the whole application. That is why I am looking for a real implementation.

If I can't find, I'll delete this Class Libray from our namespace and create a regular one to read write config to a simple xml file.
0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 11729525
// ===============================================================================
// Microsoft Configuration Management Application Block for .NET
// http://msdn.microsoft.com/library/en-us/dnbda/html/cmab.asp
//
// Form1.cs
//
// The form for the Read Quickstart
//
// For more information see the Configuration Management Application Block Implementation Overview.
//
// ===============================================================================
// Copyright (C) 2000-2001 Microsoft Corporation
// All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR
// FITNESS FOR A PARTICULAR PURPOSE.
// ==============================================================================

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Configuration;
using System.Reflection;
using Microsoft.Win32;

using Microsoft.ApplicationBlocks.ConfigurationManagement;
 
namespace Microsoft.ApplicationBlocks.ConfigurationManagement.Quickstarts.Read
{
      /// <summary>
      /// Summary description for Form1.
      /// </summary>
      public class Form1 : System.Windows.Forms.Form
      {
            private System.Windows.Forms.TextBox colorText;
            private System.Windows.Forms.TextBox sizeText;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.Label label2;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.Label label3;
            private System.Windows.Forms.TextBox someText;
            private System.Windows.Forms.ComboBox configSection;
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.Container components = null;
            internal System.Windows.Forms.CheckBox readOnlySection;
            private const string COLON = ":";

            public Form1()
            {
                  //
                  // Required for Windows Form Designer support
                  //
                  InitializeComponent();

                  // Initialize the registry values for the Quickstarts
                  try
                  {
                        using( RegistryKey regKey = Registry.LocalMachine.OpenSubKey( @"Software\Microsoft", true ) )
                        {
                              RegistryKey configMgmt = regKey.OpenSubKey( "ConfigurationManagement", true );
                              if( configMgmt == null )
                              {
                                    configMgmt = regKey.CreateSubKey( "ConfigurationManagement" );
                                    configMgmt.SetValue( "symmetricKey", "VToaqZjp8C27V90oSmT/CF+afvRGClc9" );
                                    configMgmt.SetValue( "initializationVector", "ou95G2/WziI=" );
                                    configMgmt.SetValue( "hashKey", "MyXuEd6f+go=" );
                                    configMgmt.SetValue( "connectionString", "server=localhost;database=cmab;Integrated Security=SSPI" );
                              }

                              using( configMgmt )
                              {
                                    RegistryKey encryptedRegistry = configMgmt.OpenSubKey( "EncryptedRegistry", true );
                                    if( encryptedRegistry == null )
                                    {
                                          encryptedRegistry = configMgmt.CreateSubKey( "EncryptedRegistry" );
                                          using( encryptedRegistry )
                                          {
                                                encryptedRegistry.SetValue( "value", "fLivcJGbFoqW+di0aSZk1vr+KxfpKDwhxOEzjk+nTOe4ztloqqE9CT9G8HDjxhblUiQfRNuxYGhuBhb1u5zceipZ8FMAkfgbT3d8m7r0Iovq+34cp4zdUo7CwIbgSB/Ucm+PYC4Y9uYRVxswSCvPI4+c2zVkn/erQO6zObpLSwaUfemiRawf1/Q42QqNhi5PCX8QPy7dIUZqjimaXw/vqgV6SdXqN53/Qt+rrcRQvrrzyZd31e4myKqB+eAxyteEK9+rVLMb+DcWztg91V9xiY+d+vA7zrybyK9us4Mut7U=" );
                                                encryptedRegistry.SetValue( "signature", "" );
                                          }
                                    }
                                    else
                                    {
                                          encryptedRegistry.Close();
                                    }
                              
                                    RegistryKey unencryptedRegistry = configMgmt.OpenSubKey( "UnencryptedRegistry", true );
                                    if( unencryptedRegistry == null )
                                    {
                                          unencryptedRegistry = configMgmt.CreateSubKey( "UnencryptedRegistry" );
                                          using( unencryptedRegistry )
                                          {
                                                unencryptedRegistry.SetValue( "value", "<CustomConfigurationData xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Color>Goldenron</Color><SomeText>FOO FOO FOO!</SomeText><Size>42</Size></CustomConfigurationData>" );
                                                unencryptedRegistry.SetValue( "signature", "" );
                                          }
                                    }
                                    else
                                    {
                                          unencryptedRegistry.Close();
                                    }
                              }
                        }
                  }
                  catch( Exception e )
                  {
                        throw new Exception( "Error creating registry keys for the Quickstart samples: " + e.Message, e );
                  }

                  try
                  {
                        ConfigurationManager.Initialize();
                  }
                  catch( Exception ex )
                  {
                        string message = "";
                        for( Exception tempException = ex; tempException != null; tempException = tempException.InnerException )
                        {
                              message += tempException.Message + Environment.NewLine + "----------" + Environment.NewLine;
                        }
                        MessageBox.Show( message );
                  }
            }


            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            protected override void Dispose( bool disposing )
            {
                  if( disposing )
                  {
                        if (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.colorText = new System.Windows.Forms.TextBox();
                  this.sizeText = new System.Windows.Forms.TextBox();
                  this.label1 = new System.Windows.Forms.Label();
                  this.label2 = new System.Windows.Forms.Label();
                  this.button2 = new System.Windows.Forms.Button();
                  this.label3 = new System.Windows.Forms.Label();
                  this.someText = new System.Windows.Forms.TextBox();
                  this.configSection = new System.Windows.Forms.ComboBox();
                  this.readOnlySection = new System.Windows.Forms.CheckBox();
                  this.SuspendLayout();
                  //
                  // colorText
                  //
                  this.colorText.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.colorText.Location = new System.Drawing.Point(72, 16);
                  this.colorText.Name = "colorText";
                  this.colorText.Size = new System.Drawing.Size(520, 20);
                  this.colorText.TabIndex = 1;
                  this.colorText.Text = "";
                  //
                  // sizeText
                  //
                  this.sizeText.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.sizeText.Location = new System.Drawing.Point(72, 48);
                  this.sizeText.Name = "sizeText";
                  this.sizeText.Size = new System.Drawing.Size(520, 20);
                  this.sizeText.TabIndex = 3;
                  this.sizeText.Text = "";
                  //
                  // label1
                  //
                  this.label1.Location = new System.Drawing.Point(8, 16);
                  this.label1.Name = "label1";
                  this.label1.Size = new System.Drawing.Size(168, 23);
                  this.label1.TabIndex = 4;
                  this.label1.Text = "Color";
                  //
                  // label2
                  //
                  this.label2.Location = new System.Drawing.Point(8, 48);
                  this.label2.Name = "label2";
                  this.label2.Size = new System.Drawing.Size(168, 23);
                  this.label2.TabIndex = 5;
                  this.label2.Text = "Size";
                  //
                  // button2
                  //
                  this.button2.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.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
                  this.button2.Location = new System.Drawing.Point(496, 120);
                  this.button2.Name = "button2";
                  this.button2.Size = new System.Drawing.Size(120, 88);
                  this.button2.TabIndex = 0;
                  this.button2.Text = "Get";
                  this.button2.Click += new System.EventHandler(this.button2_Click);
                  //
                  // label3
                  //
                  this.label3.Location = new System.Drawing.Point(8, 80);
                  this.label3.Name = "label3";
                  this.label3.Size = new System.Drawing.Size(168, 23);
                  this.label3.TabIndex = 5;
                  this.label3.Text = "Some text";
                  //
                  // someText
                  //
                  this.someText.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.someText.Location = new System.Drawing.Point(72, 80);
                  this.someText.Name = "someText";
                  this.someText.Size = new System.Drawing.Size(520, 20);
                  this.someText.TabIndex = 3;
                  this.someText.Text = "";
                  //
                  // configSection
                  //
                  this.configSection.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.configSection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
                  this.configSection.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
                  this.configSection.Items.AddRange(new object[] {
                                                                                             "EncryptedSql: Encrypted in SQL Server",
                                                                                             "UnencryptedSql: Unencrypted SQL Server",
                                                                                             "EncryptedXml: Encrypted Xml File (config)",
                                                                                             "UnencryptedXml: Unencrypted Xml File (config)",
                                                                                             "EncryptedRegistry: Encrypted Registry Reader",
                                                                                             "UnencryptedRegistry: Unencrypted Registry Reader",
                                                                                             "XmlSerializer: XmlFile using generic section handler",
                                                                                             "OtherConfigFile: Unencrypted Xml using other config file"});
                  this.configSection.Location = new System.Drawing.Point(8, 120);
                  this.configSection.Name = "configSection";
                  this.configSection.Size = new System.Drawing.Size(456, 24);
                  this.configSection.TabIndex = 6;
                  //
                  // readOnlySection
                  //
                  this.readOnlySection.Enabled = false;
                  this.readOnlySection.Location = new System.Drawing.Point(8, 152);
                  this.readOnlySection.Name = "readOnlySection";
                  this.readOnlySection.Size = new System.Drawing.Size(144, 24);
                  this.readOnlySection.TabIndex = 10;
                  this.readOnlySection.Text = "IsReadOnly section";
                  //
                  // Form1
                  //
                  this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                  this.ClientSize = new System.Drawing.Size(632, 214);
                  this.Controls.Add(this.readOnlySection);
                  this.Controls.Add(this.configSection);
                  this.Controls.Add(this.someText);
                  this.Controls.Add(this.sizeText);
                  this.Controls.Add(this.colorText);
                  this.Controls.Add(this.label2);
                  this.Controls.Add(this.label1);
                  this.Controls.Add(this.button2);
                  this.Controls.Add(this.label3);
                  this.Name = "Form1";
                  this.Text = "Form1";
                  this.ResumeLayout(false);

            }
            #endregion

            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {                  
                  Application.Run(new Form1());
            }


            private void button2_Click(object sender, System.EventArgs e)
            {
                  try
                  {
                  if( configSection.SelectedIndex != -1 )
                  {
                        string souceSection = ((string)configSection.SelectedItem).Split(COLON.ToCharArray())[0];
                        CustomConfigurationData cclass = (CustomConfigurationData)ConfigurationManager.Read( souceSection );
                        if( cclass == null )
                              throw new ApplicationException( "testapp:no config on provider." );

                        colorText.Text = cclass.Color;
                        sizeText.Text = cclass.Size.ToString( System.Globalization.CultureInfo.CurrentUICulture );
                        someText.Text = cclass.SomeText;

                        readOnlySection.Checked = ConfigurationManager.IsReadOnly( souceSection );
                  }
                  else
                  {
                        MessageBox.Show( "Must select the source section." );
                  }
                  }
                  catch( Exception ex )
                  {
                        string message = "";
                        for( Exception tempException = ex; tempException != null; tempException = tempException.InnerException )
                        {
                              message += tempException.Message + Environment.NewLine + "----------" + Environment.NewLine;
                        }
                        MessageBox.Show( message );
                  }
            }
      }
}

are you referring to this ?
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11729615
yes this and other files. and all the XML sections requested by the class library.
Seems that I also need CustomConfigurationData.cs, app.config, CustomSectionHandler.cs
I think I need to sleep a little and start over ;-)
0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 37

Expert Comment

by:gregoryyoung
ID: 11729722
ummm all of the other code is the code to the library (it includes source) you dont need to change any of that.
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11729774
Ok. I progressed a little.  Now I get a Invalid cast from the line

private Hashtable _configData;
_configData = (Hashtable)ConfigurationManager.Read("UnencryptedXml");

Here is my app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
      <configSections>
            <section
                  name="applicationConfigurationManagement"
                  type="CompanyName.Services.ConfigurationManagement.ConfigurationManagerSectionHandler,CompanyName.Services.ConfigurationManagement, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
            
            <section
                        name="EncryptedXml"  
                        type="TSBackup.CustomSectionHandler,TSBackup, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
            <section
                        name="UnencryptedXml"
                        type="TSBackup.CustomSectionHandler,TSBackup, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
      </configSections>

    <EncryptedXml>
        <signature>
        </signature>
        <encryptedData>fLivcJGbFoqW+di0aSZk1vr+KxfpKDwhxOEzjk+nTOe4ztloqqE9CT9G8HDjxhblUiQfRNuxYGhuBhb1u5zceipZ8FMAkfgbT3d8m7r0Iovq+34cp4zdUo7CwIbgSB/Ucm+PYC4Y9uYRVxswSCvPI4+c2zVkn/erQO6zObpLSwaUfemiRawf1/Q42QqNhi5PCX8QPy7dIUZqjimaXw/vqgV6SdXqN53/Qt+rrcRQvrrzyZd31e4myKqB+eAxyteEK9+rVLMb+DcWztg91V9xiY+d+vA7zrybyK9us4Mut7U=</encryptedData>
    </EncryptedXml>
 
      <UnencryptedXml>
                        <CustomConfigurationData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                              <Color>Burnt Orange</Color>
                              <SomeText>FROM THE CONFIG FILE, not encrypted</SomeText>
                              <Size>3245</Size>
                        </CustomConfigurationData>      
      </UnencryptedXml>
      
      <applicationConfigurationManagement defaultSection="UnencryptedXml" >
            <configSection name="EncryptedXml">
                  <configCache enabled="false" refresh="1 * * * *" />
                  <configProvider             assembly="CompanyName.Services.ConfigurationManagement,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                                                      type="CompanyName.Services.ConfigurationManagement.Storage.XmlFileStorage"
                                                      signed="false"
                                                      refreshOnChange="false"
                                                      encrypted="true" />
                  <protectionProvider       assembly="CompanyName.Services.ConfigurationManagement,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                                                      type="CompanyName.Services.ConfigurationManagement.DataProtection.BCLDataProtection"
                                                      hashKey="MyXuEd6f+go=" symmetricKey="VToaqZjp8C27V90oSmT/CF+afvRGClc9" initializationVector="ou95G2/WziI="/>
            </configSection>
                  
            <configSection name="UnencryptedXml">
                  <configCache enabled="true" refresh="1 * * * *" />
                  <configProvider             assembly="CompanyName.Services.ConfigurationManagement,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                                                      type="CompanyName.Services.ConfigurationManagement.Storage.XmlFileStorage"
                                                      signed="false"
                                                      refreshOnChange="true"
                                                      encrypted="false" />
                  <protectionProvider       assembly="CompanyName.Services.ConfigurationManagement,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                                                      type="CompanyName.Services.ConfigurationManagement.DataProtection.BCLDataProtection"
                                                      hashKey="MyXuEd6f+go=" symmetricKey="VToaqZjp8C27V90oSmT/CF+afvRGClc9" initializationVector="ou95G2/WziI="/>
            </configSection>

      </applicationConfigurationManagement>
</configuration>


0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 11729885
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
      <configSections>
            <section
                  name="applicationConfigurationManagement"
                  type="Microsoft.ApplicationBlocks.ConfigurationManagement.ConfigurationManagerSectionHandler,Microsoft.ApplicationBlocks.ConfigurationManagement, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
            
            <section
                  name="ApplConfig1"  
                  type="Microsoft.ApplicationBlocks.ConfigurationManagement.XmlHashtableSectionHandler,Microsoft.ApplicationBlocks.ConfigurationManagement,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
                                                
      </configSections>
   
  <ApplConfig1>
    <XmlSerializableHashtable xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <Entries>
        <Entry>
          <key xsi:type="xsd:string">freaky</key>
          <value xsi:type="xsd:string">chakra</value>
        </Entry>
        <Entry>
          <key xsi:type="xsd:string">killer</key>
          <value xsi:type="xsd:string">DILLER</value>
        </Entry>
        <Entry>
          <key xsi:type="xsd:string">foo</key>
          <value xsi:type="xsd:string">bar</value>
        </Entry>
        <Entry>
          <key xsi:type="xsd:string">depeche</key>
          <value xsi:type="xsd:string">mode</value>
        </Entry>
        <Entry>
          <key xsi:type="xsd:string">Bubba</key>
          <value xsi:type="xsd:string">Gump</value>
        </Entry>
      </Entries>
    </XmlSerializableHashtable>
  </ApplConfig1>
 
      
      <applicationConfigurationManagement >
            <configSection name="ApplConfig1">
                  <configCache                   enabled="true"
                                                      refresh="1 * * * *" />
                  <configProvider             assembly="Microsoft.ApplicationBlocks.ConfigurationManagement,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                                                      type="Microsoft.ApplicationBlocks.ConfigurationManagement.Storage.XmlFileStorage"
                                                      
                                                      refreshOnChange="false"
                                                      signed="false"
                                                      encrypted="false" />

                  <protectionProvider       assembly="Microsoft.ApplicationBlocks.ConfigurationManagement,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                                                      type="Microsoft.ApplicationBlocks.ConfigurationManagement.DataProtection.BCLDataProtection"
                                                      hashKeyRegistryPath="" hashKey="MyXuEd6f+go=" symmetricKey="VToaqZjp8C27V90oSmT/CF+afvRGClc9" initializationVector="ou95G2/WziI="/>
                                                      
            </configSection>
      </applicationConfigurationManagement>
</configuration>

is from the example .. notice the different usage of the hashtable ...
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11729984
I found my problem I think.

I was waiting for a HAshTable but the exemple section UnencryptedXML return a CustomConfigurationData type.  
This is why I has to have this file to map the value in the object properties.

I'll start over using the other one.
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11730043
I was using the read exemple not the hashtable. And in the help file they say that we need to receive a hashtable. Than I started to mix both together.
0
 
LVL 37

Accepted Solution

by:
gregoryyoung earned 500 total points
ID: 11730054
its alot to take in but its very powerful.
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11730107
Ya it seems.

Could you just confirm that If I dont want to learn the whole Class Library, I am in the good direction just to use the Hashtable type Exemple and leave the others on the side?
0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 11730127
it would be reasonable for the time being it does not sound to me like you will need the full functionality from the beginning. You can always learn the rest later :)
0
 

Author Comment

by:Yann de Champlain, PMP
ID: 11751534
Ya sure.
thank again.
0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 11754353
btw: if you have MSDN meetings coming through your area one of their current meetings discusses this application  block
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

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…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
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…

706 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

20 Experts available now in Live!

Get 1:1 Help Now