| using System;
                                    using System.Diagnostics;
                                    using System.Collections;
                                    using EXCommon;
                                    using System.Data;
                                    using System.Data.SqlClient;
                                    using System.Runtime.Serialization;
                                    using System.Runtime.Serialization.Formatters;
                                    using System.Runtime.Serialization.Formatters.Binary;
                                    
                                    //###5
                                    namespace EXDb97
                                    {
                                    
                                    	/// 
                                    	/// Description résumée de DbPersistenceTable.
                                    	/// 
                                    abstract public class CDbPersistenceTable : CDbTable
                                    {
                                    public CDbPersistenceTable()
                                    : base("FEATURE_DISTRIBUTION")
                                    {
                                    AddColumnKey();
                                    vAddColumn(DATE_FIELD, "Date", false);
                                    vAddColumn("[Comment]", "String 255", false);
                                    vAddColumn(VALUE_FIELD, "Binary", false);
                                    
                                    }
                                    
                                    protected virtual void AddColumnKey()
                                    {
                                    vAddColumn(INDEX_FIELD, "Date", false);
                                    }
                                    
                                    //	public const string VALUE_FIELD		= "[Value]";
                                    
                                    
                                    
                                    
                                    public override bool PrepareLine()
                                    {
                                    return dDeleteCurrent() == ST_SUCCEED;
                                    }
                                    
                                    public object Retrieve(string strKey)
                                    {
                                    string strSqlWhere = strKey;
                                    
                                    
                                    object binValue = GetValue(VALUE_FIELD, strSqlWhere);
                                    if (binValue == null)
                                    {
                                    return null;
                                    }
                                    else
                                    {
                                    return Deserialize(binValue);
                                    }
                                    
                                    }
                                    
                                    
                                    /*
                                    		public byte[] GetSerializedValue(CSerializableBase oPersistentObject) 
                                    		{
                                    			MemoryStream msStream = new MemoryStream();
                                    
                                    			IFormatter formatter = new BinaryFormatter();
                                    			// serialize shapes
                                    			try 
                                    			{
                                    				formatter.Serialize(msStream , oPersistentObject);
                                    				Debug.WriteLine("\nmsStream Stream Length = " + msStream.Length);
                                    
                                    			}
                                    			catch (SerializationException e) 
                                    			{
                                    				Console.WriteLine("Failed to serialize. Reason: " + e.Message);
                                    				throw;
                                    			}
                                    			finally 
                                    			{
                                    				msStream.Close();
                                    			}
                                    
                                    			//		msStream.Seek(0,0);
                                    	
                                    			return msStream.GetBuffer();
                                    		}
                                    
                                    
                                    
                                    		public object Deserialize(object binValue) 
                                    		{
                                    
                                    			MemoryStream msStream = new MemoryStream((byte [])binValue);
                                    
                                    			Debug.WriteLine("\nmsStream Retrieved Length = " + msStream.Length);
                                    			IFormatter formatter = new BinaryFormatter();
                                    			object oSerializedValue;
                                    			try 
                                    			{
                                    				oSerializedValue= formatter.Deserialize(msStream);
                                    			}
                                    			catch (SerializationException e) 
                                    			{
                                    				Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
                                    				throw;
                                    			}
                                    			finally 
                                    			{
                                    				msStream.Close();
                                    			}
                                    
                                    			return oSerializedValue;
                                    
                                    		}*/
                                    }
                                    
                                    	/// 
                                    	/// Description résumée de DbRecord.
                                    	/// 
                                    	public class CDbRecordArray
                                    	{
                                    		public CDbRecordArray(int nRecordSize)
                                    		{
                                    			m_nRecordSize = nRecordSize;
                                    			m_oRecordArray = new ArrayList(100);
                                    			m_nReaderIndex = -1;
                                    m_oFieldArray = null;
                                    		}
                                    		int m_nRecordSize;
                                    		int m_nReaderIndex;
                                    
                                    string[] m_oFieldArray;
                                    
                                    		ArrayList m_oRecordArray;
                                    		public void InitRead()
                                    		{
                                    			m_nReaderIndex = -1;
                                    		}
                                    
                                    		public bool Read()
                                    		{
                                    			m_nReaderIndex++;
                                    			return m_nReaderIndex < Count;
                                    		}
                                    
                                    		public bool Contains(int nField, object oValue) 
                                    		{
                                    			for(int i=0; i < m_oRecordArray.Count; i++) 
                                    			{
                                    				object[] oRecordArray = (object[])m_oRecordArray[i];
                                    			//	Debug.WriteLine("oRecordArray[nField] = " + oRecordArray[nField]);
                                    				if ( oRecordArray[nField].Equals( oValue) )
                                    				{
                                    					return true;
                                    				}
                                    			}
                                    			return false;
                                    		}
                                    		public void Fill(CDbConnection oDbConnection)
                                    		{
                                    
                                    //Retrieve column schema into a DataTable.
                                    DataTable schemaTable = oDbConnection.Reader.GetSchemaTable();
                                    m_oFieldArray = new string[schemaTable.Columns.Count];
                                    
                                    int i = 0;
                                    foreach (DataColumn myProperty in schemaTable.Columns)
                                    {
                                    m_oFieldArray[i] = myProperty.ColumnName;
                                    i++;
                                    }
                                    
                                    
                                    
                                    m_oRecordArray = new ArrayList(100);
                                    			m_nReaderIndex = -1;
                                    			while ( oDbConnection.Read() )
                                    			{
                                    
                                    				object[] oRecordArray = new object[m_nRecordSize];
                                    				oDbConnection.Reader.GetValues(oRecordArray);
                                    				m_oRecordArray.Add(oRecordArray);
                                    				Debug.Write("\n" + oRecordArray[0].ToString() + " " + m_oRecordArray.Count + " ");
                                    			}
                                    			m_oRecordArray.TrimToSize();
                                    		}
                                    		public int Count 
                                    		{
                                    			get 
                                    			{
                                    				return m_oRecordArray.Count;
                                    			}
                                    		}
                                    		public int Length
                                    		{
                                    			get 
                                    			{
                                    				return m_nRecordSize;
                                    			}
                                    		}
                                    
                                    		public object this[int nIndex]  
                                    		{
                                    			get 
                                    			{
                                    				object[] oRecord = (object[])m_oRecordArray[m_nReaderIndex];
                                    				return oRecord[nIndex];
                                    			}
                                    		}
                                    		public string GetString(int nIndex)  
                                    		{
                                    			object[] oRecord = (object[])m_oRecordArray[m_nReaderIndex];
                                    			return (oRecord[nIndex]).ToString();
                                    		}
                                    		public int GetInt32(int nIndex)  
                                    		{
                                    			object[] oRecord = (object[])m_oRecordArray[m_nReaderIndex];
                                    			return Convert.ToInt32(oRecord[nIndex]);
                                    		}
                                    		public bool GetBoolean(int nIndex)  
                                    		{
                                    			object[] oRecord = (object[])m_oRecordArray[m_nReaderIndex];
                                    			return Convert.ToBoolean(oRecord[nIndex]);
                                    		}
                                    public string sGetAllField()
                                    {
                                    return sConvert((object[])m_oRecordArray[m_nReaderIndex]);
                                    }
                                    int dIndexOf(string sFieldName)
                                    {
                                    if (m_oFieldArray != null)
                                    {
                                    for (int i = 0; i < m_oFieldArray.Length; i++)
                                    {
                                    if (m_oFieldArray[i] == sFieldName)
                                    {
                                    return i;
                                    }
                                    }
                                    
                                    }
                                    return CBase.NOT_USED;
                                    }
                                    
                                    public bool bIsEqual(string sFieldName, object oValue)
                                    {
                                    int dIdx = dIndexOf(sFieldName);
                                    if (CBase.IsUsed(dIdx))
                                    {
                                    object[] oRecord = (object[])m_oRecordArray[m_nReaderIndex];
                                                    return oRecord[dIdx] == oValue;
                                    
                                                }
                                                return false;
                                            }
                                            public bool bUpdate(string sFieldName, object oValue)
                                            {
                                                int dIdx = dIndexOf(sFieldName);
                                                if ( CBase.IsUsed(dIdx)) {
                                                    object[] oRecord = (object[])m_oRecordArray[m_nReaderIndex];
                                                    oRecord[dIdx] = oValue;
                                                    m_oRecordArray[m_nReaderIndex] = oRecord;
                                                }
                                                return false;
                                            }
                                    
                                            static public string sConvert(object[] oArray)
                                            {
                                                if (oArray == null || oArray.Length == 0) return null;
                                                string sOutput = oArray[0].ToString();
                                                for (int i = 1; i < oArray.Length; i++)
                                                {
                                                    sOutput += ',' + oArray[i].ToString();
                                                }
                                                return sOutput;
                                    
                                            }
                                    
                                    	}
                                    }
                                    
                                    
                                  |