Click here to Skip to main content
15,896,063 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.8K   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.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace JGClassGenerator
{
	internal partial class FormImportPreviousProjects : FormBaseDialog
	{
		internal FormImportPreviousProjects()
		{
			InitializeComponent();
			ShowButtons = true;
		}

		private void FormImportPreviousProjects_Load(object sender, EventArgs e)
		{
			string mes = Environment.NewLine + "This will allow you to convert previously saved projects (version 2 and before) to the new format and save them.";
			mes += Environment.NewLine + Environment.NewLine + "Conversion may take some time depending on the number of projects to convert.";
			lblMessage.Text = mes;

			ButtonOKText = "Convert";
			ButtonOKTooltip = "Proceed With Conversion";
			ButtonOK.Enabled = false;
			ButtonCancelText = "Close";
			ButtonCancelTooltip = "Close Dialog";

			pickSRCEDB.InitialDirectory = JCommon.AppSettingsPath();
			pickSRCEDB.Enabled = false;
		}

		internal override void ButtonOK_Click(object sender, EventArgs e)
		{
			this.Cursor = Cursors.WaitCursor;

			ShowMessage("Converting and Importing...", false);
			this.Refresh();

			int numConverted = DoConversion();
			if (numConverted > 0)
				ShowMessage(numConverted.ToString() + " Records Converted", true);

			this.Cursor = Cursors.Default;
		}

		private void cboTableNames_TextChanged(object sender, EventArgs e)
		{
			SetButtonStatus();
		}

		//	Converts JProjectData to JSavedProject
		private int ConvertRecords(List<JProjectData> listProjectData)
		{
			int numConverted = 0;
			JSavedProject savedPD;

			Dictionary<string, int> dicNetTypes = JNETTypesUpdater.GetNETTypesDictionary();
			Dictionary<int, JTypesData> dictDataTypes = JTypesUpdater.GetDataTypesMatrix();

			foreach (JProjectData projectData in listProjectData)
			{
				savedPD = new JSavedProject();

				savedPD.ClassName = projectData.ClassName;
				savedPD.ClassNameSpace = projectData.ClassNameSpace;
				savedPD.ClassFileSaveDirectory = projectData.ClassFileSaveDirectory;
				savedPD.ClassDataSource = (JCommon.ClassDataTypes)projectData.ClassDataType;
				savedPD.ClassScope = projectData.ClassScope;
				savedPD.ModuleVariablePrefix = projectData.ModuleVariablePrefix;
				savedPD.AdditionalFunctions = projectData.AdditionalFunctions;
				savedPD.AdditionalFields = projectData.AdditionalFields;
				savedPD.UsingDirectives = "";

				if (projectData.ClassDataType == (int)JCommon.ClassDataTypes.ADONET)
				{
					savedPD.AccessDatabasePath = projectData.DatabasePath;
					savedPD.AccessTableName = projectData.TableName;
					savedPD.IsAccess12 = projectData.Access12;
					savedPD.UseADODB = false;

					savedPD.SQLiteDatabasePath = "";
					savedPD.SQLiteTableName = "";

					savedPD.XMLDatabasePath = "";
					savedPD.XMLDataSetName = "";
					savedPD.XMLNameSpace = "";
					savedPD.XMLTableName = "";
				}
				else if (projectData.ClassDataType == (int)JCommon.ClassDataTypes.ADODB)
				{
					savedPD.AccessDatabasePath = projectData.DatabasePath;
					savedPD.AccessTableName = projectData.TableName;
					savedPD.IsAccess12 = projectData.Access12;
					savedPD.UseADODB = true;

					savedPD.SQLiteDatabasePath = "";
					savedPD.SQLiteTableName = "";

					savedPD.XMLDatabasePath = "";
					savedPD.XMLDataSetName = "";
					savedPD.XMLNameSpace = "";
					savedPD.XMLTableName = "";
				}
				else if (projectData.ClassDataType == (int)JCommon.ClassDataTypes.SQLITE)
				{
					savedPD.AccessDatabasePath = "";
					savedPD.AccessTableName = "";
					savedPD.IsAccess12 = false;
					savedPD.UseADODB = false;

					savedPD.SQLiteDatabasePath = projectData.DatabasePath;
					savedPD.SQLiteTableName = projectData.TableName;

					savedPD.XMLDatabasePath = "";
					savedPD.XMLDataSetName = "";
					savedPD.XMLNameSpace = "";
					savedPD.XMLTableName = "";
				}
				else if (projectData.ClassDataType == (int)JCommon.ClassDataTypes.XML)
				{
					savedPD.AccessDatabasePath = "";
					savedPD.AccessTableName = "";
					savedPD.IsAccess12 = false;
					savedPD.UseADODB = false;

					savedPD.SQLiteDatabasePath = "";
					savedPD.SQLiteTableName = "";

					savedPD.XMLDatabasePath = projectData.DatabasePath;
					savedPD.XMLDataSetName = projectData.DataSetName;
					savedPD.XMLNameSpace = projectData.DBNameSpace;
					savedPD.XMLTableName = projectData.TableName;
				}

				//	We need the record number for the FieldsData
				int newRecNum = JSavedProjectUpdater.AddRecord(savedPD);

				SaveFieldsData(projectData.FieldString, newRecNum, dicNetTypes, dictDataTypes);

				numConverted++;
			}

			return numConverted;
		}

		private int DoConversion()
		{
			int numTransferred = 0;

			if (!rbSRCEAccess12.Checked && !rbSRCEAccessMDB.Checked && !rbSRCEXML.Checked)
			{
				ShowMessage("Please select the source data type", true);
				return numTransferred;
			}

			string srceDBPath = pickSRCEDB.SelectedPath;

			if (string.IsNullOrEmpty(srceDBPath))
			{
				ShowMessage("Please Select Source Database", true);
				return numTransferred;
			}

			FileInfo fInfo = new FileInfo(srceDBPath);
			if (!fInfo.Exists)
			{
				ShowMessage("Cannot Find Source Database File", true);
				return numTransferred;
			}

			string tableName = cboTableNames.Text;
			if (string.IsNullOrEmpty(tableName))
			{
				ShowMessage("Please Select Table Name", true);
				return numTransferred;
			}

			string originalSRCEPath = "";
			string originalTableName = "";

			List<JProjectData> listRecords;

			try
			{
				if (rbSRCEAccess12.Checked)
				{
					originalSRCEPath = JProjectUpdaterAC12.DataBasePath;
					originalTableName = JProjectUpdaterAC12.TableName;

					JProjectUpdaterAC12.DataBasePath = pickSRCEDB.SelectedPath;
					JProjectUpdaterAC12.TableName = tableName;

					listRecords = GetAccess12Records();
				}
				else if (rbSRCEAccessMDB.Checked)
				{
					originalSRCEPath = JProjectUpdaterACMDB.DataBasePath;
					originalTableName = JProjectUpdaterACMDB.TableName;

					JProjectUpdaterACMDB.DataBasePath = pickSRCEDB.SelectedPath;
					JProjectUpdaterACMDB.TableName = tableName;

					listRecords = GetAccessMDBRecords();
				}
				else if (rbSRCEXML.Checked)
				{
					originalSRCEPath = JProjectUpdaterXML.DataBasePath;
					originalTableName = JProjectUpdaterXML.TableName;

					JProjectUpdaterXML.DataBasePath = pickSRCEDB.SelectedPath;
					JProjectUpdaterXML.TableName = tableName;

					listRecords = GetXMLRecords();
				}
				else
				{
					return numTransferred;
				}

				numTransferred = ConvertRecords(listRecords);
			}

			finally
			{
				if (rbSRCEAccess12.Checked)
				{
					JProjectUpdaterAC12.DataBasePath = originalSRCEPath;
					JProjectUpdaterAC12.TableName = originalTableName;
				}
				else if (rbSRCEAccessMDB.Checked)
				{
					JProjectUpdaterACMDB.DataBasePath = originalSRCEPath;
					JProjectUpdaterACMDB.TableName = originalTableName;
				}
				else if (rbSRCEXML.Checked)
				{
					JProjectUpdaterXML.DataBasePath = originalSRCEPath;
					JProjectUpdaterXML.TableName = originalTableName;
				}
			}
			return numTransferred;
		}

		private int FillAccessTableNamesCombo(string filePath, bool access12)
		{
			int numTables = 0;

			cboTableNames.Items.Clear();
			cboTableNames.Text = "";

			List<string> listNames = JCommon.GetAccessTableNames(filePath, access12);
			if (listNames.Count > 0)
			{
				numTables = listNames.Count;
				lblTableNames.Text = "Access Table Name " + "(" + numTables.ToString() + " found)";
				foreach (string name in listNames)
					cboTableNames.Items.Add(name);
			}
			else
			{
				lblTableNames.Text = "Access Table Name " + "(None found)";
			}
			return numTables;
		}

		private int FillXMLTableNamesCombo(string filePath)
		{
			int numTables = 0;

			cboTableNames.Items.Clear();
			cboTableNames.Text = "";

			List<string> listNames = JCommon.GetXMLTableNames(filePath);
			if (listNames.Count > 0)
			{
				numTables = listNames.Count;
				lblTableNames.Text = "XML Table Name (" + numTables.ToString() + " Found)";
				foreach (string name in listNames)
					cboTableNames.Items.Add(name);
			}
			else
			{
				lblTableNames.Text = "XML Table Name " + "(None found)";
			}
			return numTables;
		}

		private List<JProjectData> GetAccess12Records()
		{
			return JProjectUpdaterAC12.AllRecords();
		}

		private List<JProjectData> GetAccessMDBRecords()
		{
			return JProjectUpdaterACMDB.AllRecords();
		}

		private List<JProjectData> GetXMLRecords()
		{
			return JProjectUpdaterXML.AllRecords();
		}

		private void pickSRCEDB_PathSelected(object sender, JFileFolderPicker.PathArgs e)
		{
			if (rbSRCEXML.Checked)
				FillXMLTableNamesCombo(e.SelectedPath);
			else
				FillAccessTableNamesCombo(e.SelectedPath, rbSRCEAccess12.Checked);

			SetButtonStatus();
		}

		private void SaveFieldsData(string fieldList, int parentRecNum, Dictionary<string, int> dicNetTypes, Dictionary<int, JTypesData> dictDataTypes)
		{
			int fieldIndex;
			JFieldsData fieldsData;

			string[] lvRows = fieldList.Split('#');
			string[] rowItems;
			string netDataType;
			fieldIndex = 0;

			foreach (string current in lvRows)
			{
				if (!string.IsNullOrEmpty(current))
				{
					rowItems = current.Split(',');
					{
						fieldsData = new JFieldsData();
						fieldsData.FieldIndex = fieldIndex;
						fieldsData.ParentRecordNumber = parentRecNum;
						fieldsData.FieldName = rowItems[0].Trim();
						fieldsData.FieldLength = 0;

						netDataType = rowItems[3].Trim();

						if (dicNetTypes.ContainsKey(netDataType))
						  fieldsData.TypeID = dicNetTypes[netDataType];
						else
							fieldsData.TypeID = 0;
						
						fieldsData.IsAutoIncrement = (rowItems[4].Trim() == "Yes");
						fieldsData.IsKeyField = (rowItems[5].Trim() == "Yes");
						fieldsData.IsStringOverride = (rowItems[6].Trim() == "Yes");
						fieldsData.WantsOwnGet = (rowItems[7].Trim() == "Yes");
						fieldsData.WantsOwnUpdate = (rowItems[8].Trim() == "Yes");

						fieldsData.IsUserDefined = false;
						fieldsData.UserDefinedType = "";
						fieldsData.UDInitialValue = "";

						JFieldsUpdater.AddRecord(fieldsData);

						fieldIndex++;
					}
				}
			}
		}

		private void SetSRCEFileFilter()
		{
			string fileFilter = "";

			if (rbSRCEAccess12.Checked)
			{
				fileFilter = "Access DB Files (*.accdb)|*.accdb";
			}
			else if (rbSRCEAccessMDB.Checked)
			{
				fileFilter = "Access DB Files (*.mdb)|*.mdb";
			}
			else if (rbSRCEXML.Checked)
			{
				fileFilter = "XML File (*.xml|*.xml";
			}

			if (!string.IsNullOrEmpty(fileFilter))
			{
				pickSRCEDB.FileFilter = fileFilter;
				pickSRCEDB.Enabled = true;
			}
		}

		private void SRCE_CheckedChanged(object sender, EventArgs e)
		{
			pickSRCEDB.SelectedPath = "";
			cboTableNames.Items.Clear();
			SetSRCEFileFilter();
			SetButtonStatus();
		}

		private void SetButtonStatus()
		{
			bool enabled = (!String.IsNullOrEmpty(cboTableNames.Text)) && (!String.IsNullOrEmpty(pickSRCEDB.SelectedPath));

			ButtonOK.Enabled = enabled;
		}


	}
}












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