Click here to Skip to main content
15,885,366 members
Articles / Programming Languages / XML

Create Data Classes

Rate me:
Please Sign up or sign in to vote.
4.88/5 (31 votes)
4 Mar 2011CPOL10 min read 135.4K   2.5K   167  
An application that creates a C# class to read/write data to/from an Access, SQLite, or XML database.
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace JGCreateDataClasses
{
	internal class JSavedProject
	{
		private Int32 m_RecordNumber = 0;
		private String m_LastUpdated = "";
		private String m_ClassNameSpace = "";
		private String m_ClassName = "None";
		private String m_ClassFileSaveDirectory = "";
		private JCommon.ClassDataTypes m_ClassDataSource = 0;
		private String m_ClassScope = "";
		private String m_ModuleVariablePrefix = "";
		private String m_AdditionalFunctions = "";
		private String m_AdditionalFields = "";
		private String m_AccessDatabasePath = "";
		private String m_AccessTableName = "";
		private Boolean m_IsAccess12;
		private Boolean m_UseADODB;
		private String m_SQLiteDatabasePath = "";
		private String m_SQLiteTableName = "";
		private String m_XMLDatabasePath = "";
		private String m_XMLTableName = "";
		private String m_XMLNameSpace = "";
		private String m_XMLDataSetName = "";

		//	Bare constructor
		internal JSavedProject()
		{
			this.m_RecordNumber = 0;
		}

		//	Constructor from key field number
		internal JSavedProject(Int32 recordNumber)
		{
			JSavedProjectUpdater.GetRecord(recordNumber, this);
		}

		//	Constructor from string override
		internal JSavedProject(String className)
		{
			JSavedProjectUpdater.GetRecord(className, this);
		}

		//	String override for main class - must be public
		public override string ToString()
		{
			return this.m_ClassName;
		}

		//	Lightweight class for adding to ListView, Combo etc
		//	Contains the Key field and string override
		internal class JSavedProjectIndexData
		{
			internal Int32 RecordNumber;
			internal string ClassName = "None";

			internal JSavedProjectIndexData()
			{
			}

			internal JSavedProjectIndexData(JSavedProject savedProject)
			{
				this.RecordNumber = savedProject.RecordNumber;
				this.ClassName = savedProject.ClassName;
			}

			//	String override for index data - must be public
			public override string ToString()
			{
				return this.ClassName;
			}
		}

		#region Public Properties


		internal Int32 RecordNumber
		{
			get { return this.m_RecordNumber; }
			set { this.m_RecordNumber = value; }
		}

		internal String LastUpdated
		{
			get { return this.m_LastUpdated; }
			set { this.m_LastUpdated = value; }
		}

		internal String ClassNameSpace
		{
			get { return this.m_ClassNameSpace; }
			set { this.m_ClassNameSpace = value; }
		}

		internal String ClassName
		{
			get { return this.m_ClassName; }
			set { this.m_ClassName = value; }
		}

		internal String ClassFileSaveDirectory
		{
			get { return this.m_ClassFileSaveDirectory; }
			set { this.m_ClassFileSaveDirectory = value; }
		}

		internal JCommon.ClassDataTypes ClassDataSource
		{
			get { return this.m_ClassDataSource; }
			set { this.m_ClassDataSource = value; }
		}

		internal String ClassScope
		{
			get { return this.m_ClassScope; }
			set { this.m_ClassScope = value; }
		}

		internal String ModuleVariablePrefix
		{
			get { return this.m_ModuleVariablePrefix; }
			set { this.m_ModuleVariablePrefix = value; }
		}

		internal String AdditionalFunctions
		{
			get { return this.m_AdditionalFunctions; }
			set { this.m_AdditionalFunctions = value; }
		}

		internal String AdditionalFields
		{
			get { return this.m_AdditionalFields; }
			set { this.m_AdditionalFields = value; }
		}

		internal String AccessDatabasePath
		{
			get { return this.m_AccessDatabasePath; }
			set { this.m_AccessDatabasePath = value; }
		}

		internal String AccessTableName
		{
			get { return this.m_AccessTableName; }
			set { this.m_AccessTableName = value; }
		}

		internal Boolean IsAccess12
		{
			get { return this.m_IsAccess12; }
			set { this.m_IsAccess12 = value; }
		}

		internal Boolean UseADODB
		{
			get { return this.m_UseADODB; }
			set { this.m_UseADODB = value; }
		}

		internal String SQLiteDatabasePath
		{
			get { return this.m_SQLiteDatabasePath; }
			set { this.m_SQLiteDatabasePath = value; }
		}

		internal String SQLiteTableName
		{
			get { return this.m_SQLiteTableName; }
			set { this.m_SQLiteTableName = value; }
		}

		internal String XMLDatabasePath
		{
			get { return this.m_XMLDatabasePath; }
			set { this.m_XMLDatabasePath = value; }
		}

		internal String XMLTableName
		{
			get { return this.m_XMLTableName; }
			set { this.m_XMLTableName = value; }
		}

		internal String XMLNameSpace
		{
			get { return this.m_XMLNameSpace; }
			set { this.m_XMLNameSpace = value; }
		}

		internal String XMLDataSetName
		{
			get { return this.m_XMLDataSetName; }
			set { this.m_XMLDataSetName = value; }
		}


		#endregion

		#region Additional Fields

		//	Calculated Fields - NB These are not saved in the database



		private string m_StringOverride;
		private string m_StringOverrideInitialValue;

		private string m_Keyfield;
		private string m_KeyfieldDataType;
		private string m_KeyFieldInitialValue;

		public string ClassVariableName
		{
			get
			{
				string classVariableName = this.ClassName.Substring(1);
				return JCommon.InitialLowerCase(classVariableName);
			}
		}

		internal string IndexClassName
		{
			get { return this.ClassName + "IndexData"; }
		}

		public string IndexClassVariableName
		{
			get { return this.ClassVariableName + "IndexData"; }
		}

		internal string Keyfield
		{
			get { return this.m_Keyfield; }
			set { this.m_Keyfield = value; }
		}

		internal string KeyfieldDataType
		{
			get { return this.m_KeyfieldDataType; }
			set { this.m_KeyfieldDataType = value; }
		}

		internal string KeyFieldInitialValue
		{
			get { return this.m_KeyFieldInitialValue; }
			set { this.m_KeyFieldInitialValue = value; }
		}

		internal string StringOverrideInitialValue
		{
			get { return this.m_StringOverrideInitialValue; }
			set { this.m_StringOverrideInitialValue = value; }
		}

		internal string StringOverride
		{
			get { return this.m_StringOverride; }
			set { this.m_StringOverride = value; }
		}

		internal string PrivateVariableName(string variable)
		{
			return this.ModuleVariablePrefix + variable;
		}

		public string UpdaterClassName
		{
			get { return this.ClassName + "Updater"; }
		}

		public string AdditionalFunctionsClassName
		{
			get { return this.ClassName + "Functions"; }
		}


		internal List<JFieldsData> FieldsDataList
		{
			get { return GetFieldsDataList(); }
		}

		private List<JFieldsData> GetFieldsDataList()
		{
			return JFieldsDataFunctions.GetFieldsDataList(this.RecordNumber);
		}


		#endregion

	}


	#region Updater Class

	//	Steers calls to appropriate updater

	static class JSavedProjectUpdater
	{
		//	AddRecord
		internal static int AddRecord(JSavedProject savedProject)
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				return JSavedProjectUDAC.AddRecord(savedProject);
			else
				return JSavedProjectUDSQLite.AddRecord(savedProject);
		}

		//	Returns all index data in a List
		internal static List<JSavedProject.JSavedProjectIndexData> AllIndexData()
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				return JSavedProjectUDAC.AllIndexData();
			else
				return JSavedProjectUDSQLite.AllIndexData();
		}

		//	Returns all records in a List
		internal static List<JSavedProject> AllRecords()
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				return JSavedProjectUDAC.AllRecords();
			else
				return JSavedProjectUDSQLite.AllRecords();
		}

		//	Returns all records in a List
		internal static List<JSavedProject> AllRecords(string sortField)
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				return JSavedProjectUDAC.AllRecords(sortField);
			else
				return JSavedProjectUDSQLite.AllRecords(sortField);
		}

		//	DeleteRecord
		internal static bool DeleteRecord(JSavedProject savedProject)
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				return JSavedProjectUDAC.DeleteRecord(savedProject);
			else
				return JSavedProjectUDSQLite.DeleteRecord(savedProject);
		}

		//	GetField
		internal static object GetField(Int32 recordNumber, string fieldName)
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				return JSavedProjectUDAC.GetField(recordNumber, fieldName);
			else
				return JSavedProjectUDSQLite.GetField(recordNumber, fieldName);
		}

		//	GetRecord (From Key Field)
		internal static void GetRecord(Int32 recordNumber, JSavedProject savedProject)
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				JSavedProjectUDAC.GetRecord(recordNumber, savedProject);
			else
				 JSavedProjectUDSQLite.GetRecord(recordNumber, savedProject);
		}

		//	GetRecord (From string Override)
		internal static void GetRecord(string className, JSavedProject savedProject)
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				JSavedProjectUDAC.GetRecord(className, savedProject);
			else
				JSavedProjectUDSQLite.GetRecord(className, savedProject);
		}

		//	UpdateField
		internal static bool UpdateField(Int32 recordNumber, string fieldName, object value)
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				return JSavedProjectUDAC.UpdateField(recordNumber, fieldName, value);
			else
				return JSavedProjectUDSQLite.UpdateField(recordNumber, fieldName, value);
		}

		internal static bool UpdateRecord(JSavedProject savedProject)
		{
			if (JCommon.ProjectDataType == JCommon.ClassDataTypes.ADONET)
				return JSavedProjectUDAC.UpdateRecord(savedProject);
			else
				return JSavedProjectUDSQLite.UpdateRecord(savedProject);
		}

	}


	#endregion



	#region Additional Functions Class


	static class JSavedProjectFunctions
	{
	}


	#endregion


}


By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Retired
United Kingdom United Kingdom
I have been a keen hobbyist programmer since getting my first computer - a Vic 20 (you had to be able to write programs then since few programs were available and all were expensive).
Retired and now living in Pewsey, Wiltshire, where I spend (far too much of) my time writing computer programs to keep my mind active.

Comments and Discussions