Click here to Skip to main content
15,896,606 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.9K   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.SQLite;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace JGCreateDataClasses
{
	static class JSavedProjectUDSQLite
	{
		internal static string m_DBPath = JCommon.DatabasePath;
		internal static string m_TableName = "tblSavedProject";

		//	AddRecord
		internal static int AddRecord(JSavedProject savedProject)
		{
			//	Add Only - Use UpdateRecord for existing records
			int result = 0;

			//	Create Connection
			using (SQLiteConnection dbConnection = GetDBConnection())
			{
				dbConnection.Open();

				SQLiteCommand command = GetInsertCommand(savedProject);
				command.Connection = dbConnection;

				// Execute the command
				command.ExecuteScalar();

				// Create Command to get IDENTITY Value
				SQLiteCommand oleCmdGetIdentity = new SQLiteCommand();
				oleCmdGetIdentity.CommandText = "SELECT last_insert_rowid()";
				oleCmdGetIdentity.Connection = dbConnection;
				result = Int32.Parse(oleCmdGetIdentity.ExecuteScalar().ToString());

				// Close and dispose
				command.Dispose();
				oleCmdGetIdentity.Dispose();
			}
			// Set return value
			return result;
		}

		//	Returns all index data in a List
		internal static List<JSavedProject.JSavedProjectIndexData> AllIndexData()
		{
			List<JSavedProject.JSavedProjectIndexData> listRecords = new List<JSavedProject.JSavedProjectIndexData>();

			//	Create the SelectCommand.
			string selectString = "SELECT RecordNumber, ClassName FROM " + m_TableName;
			selectString += " ORDER BY ClassName";

			return GetIndexDataList(selectString);
		}

		//	Returns all records in a List
		internal static List<JSavedProject> AllRecords()
		{
			//	Create the SelectCommand.
			string selectString = "SELECT *  FROM " + m_TableName;
			selectString += " ORDER BY ClassName";
			return GetRecordList(selectString);
		}

		//	Returns all records in a List
		internal static List<JSavedProject> AllRecords(string sortField)
		{
			//	Create the SelectCommand.
			string selectString = "SELECT *  FROM " + m_TableName;
			selectString += " ORDER BY " + sortField;
			return GetRecordList(selectString);
		}

		private static SQLiteDataAdapter CreateSelectAdapter(SQLiteConnection connection, string selectString)
		{
			SQLiteDataAdapter oledbAdapter = new SQLiteDataAdapter(selectString, connection);
			return oledbAdapter;
		}

		//	DeleteRecord
		internal static bool DeleteRecord(JSavedProject savedProject)
		{
			//	Create Delete Command
			string deleteString = "DELETE * FROM ";
			deleteString += m_TableName;
			deleteString += " WHERE RecordNumber = ";
			deleteString += savedProject.RecordNumber.ToString();

			try
			{
				using (SQLiteConnection dbConnection = GetDBConnection())
				{
					dbConnection.Open();
					SQLiteCommand dbCommand = new SQLiteCommand(deleteString, dbConnection);
					dbCommand.ExecuteScalar();
				}
				return true;
			}
			catch
			{
				return false;
			}
		}

		//	ExecuteNonQuery
		internal static bool ExecuteNonQuery(string commandString)
		{
			try
			{
				using (SQLiteConnection dbConnection = GetDBConnection())
				{
					dbConnection.Open();
					SQLiteCommand dbCommand = new SQLiteCommand(commandString, dbConnection);
					dbCommand.ExecuteNonQuery();
				}
				return true;
			}
			catch
			{
				return false;
			}
		}

		//	GetField
		internal static object GetField(Int32 recordNumber, string fieldName)
		{
			object obTemp = null;

			// Create the SelectCommand.
			string selectString = "SELECT " + fieldName + " FROM " + m_TableName;
			selectString += " WHERE RecordNumber = ";
			selectString += recordNumber.ToString();

			//	Create Connection
			using (SQLiteConnection dbConnection = GetDBConnection())
			{
				dbConnection.Open();

				SQLiteDataAdapter dbDataAdapter = CreateSelectAdapter(dbConnection, selectString);

				//	Create / Fill the dataset
				DataSet dataSet = new DataSet();
				dbDataAdapter.Fill(dataSet, m_TableName);

				// Get the Table from the Dataset
				DataTable dataTable = dataSet.Tables[0];
				DataRow dataRow = dataTable.Rows[0];
				obTemp = dataRow[fieldName].ToString();
			}
			return obTemp;
		}

		//	Returns all index data in a List
		internal static List<JSavedProject.JSavedProjectIndexData> GetIndexDataList(string selectString)
		{
			List<JSavedProject.JSavedProjectIndexData> listRecords = new List<JSavedProject.JSavedProjectIndexData>();
			JSavedProject.JSavedProjectIndexData indexData;

			//	Create Connection
			using (SQLiteConnection dbConnection = GetDBConnection())
			{
				dbConnection.Open();

				SQLiteDataAdapter dbDataAdapter = CreateSelectAdapter(dbConnection, selectString);

				//	Create / Fill the dataset
				DataSet dataSet = new DataSet();
				dbDataAdapter.Fill(dataSet, m_TableName);

				//	Get the Table from the Dataset
				DataTable dataTable = dataSet.Tables[0];

				// Loop through the Dataset and add each Row to the List
				foreach (DataRow dataRow in dataTable.Rows)
				{
					indexData = new JSavedProject.JSavedProjectIndexData();
					GetRecordDetailsForIndexdata(dataRow, ref indexData);
					listRecords.Add(indexData);
				}
			}
			return listRecords;
		}

		//	GetInsertCommand
		private static SQLiteCommand GetInsertCommand(JSavedProject savedProject)
		{
			string insertCommand;

			insertCommand = "INSERT INTO " + m_TableName;
			insertCommand += "(";
			insertCommand += " LastUpdated,";
			insertCommand += " ClassNameSpace,";
			insertCommand += " ClassName,";
			insertCommand += " ClassFileSaveDirectory,";
			insertCommand += " ClassDataSource,";
			insertCommand += " ClassScope,";
			insertCommand += " ModuleVariablePrefix,";
			insertCommand += " AdditionalFunctions,";
			insertCommand += " AdditionalFields,";
			insertCommand += " AccessDatabasePath,";
			insertCommand += " AccessTableName,";
			insertCommand += " IsAccess12,";
			insertCommand += " UseADODB,";
			insertCommand += " SQLiteDatabasePath,";
			insertCommand += " SQLiteTableName,";
			insertCommand += " XMLDatabasePath,";
			insertCommand += " XMLTableName,";
			insertCommand += " XMLNameSpace,";
			insertCommand += " XMLDataSetName";
			insertCommand += " )";

			insertCommand += " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

			// Create the InsertCommand
			SQLiteCommand commandInsert = new SQLiteCommand(insertCommand);

			commandInsert.Parameters.Add(new SQLiteParameter("@LastUpdated", DateTime.Now.ToString()));
			commandInsert.Parameters.Add(new SQLiteParameter("@ClassNameSpace", savedProject.ClassNameSpace));
			commandInsert.Parameters.Add(new SQLiteParameter("@ClassName", savedProject.ClassName));
			commandInsert.Parameters.Add(new SQLiteParameter("@ClassFileSaveDirectory", savedProject.ClassFileSaveDirectory));
			commandInsert.Parameters.Add(new SQLiteParameter("@ClassDataSource", savedProject.ClassDataSource));
			commandInsert.Parameters.Add(new SQLiteParameter("@ClassScope", savedProject.ClassScope));
			commandInsert.Parameters.Add(new SQLiteParameter("@ModuleVariablePrefix", savedProject.ModuleVariablePrefix));
			commandInsert.Parameters.Add(new SQLiteParameter("@AdditionalFunctions", savedProject.AdditionalFunctions));
			commandInsert.Parameters.Add(new SQLiteParameter("@AdditionalFields", savedProject.AdditionalFields));
			commandInsert.Parameters.Add(new SQLiteParameter("@AccessDatabasePath", savedProject.AccessDatabasePath));
			commandInsert.Parameters.Add(new SQLiteParameter("@AccessTableName", savedProject.AccessTableName));
			commandInsert.Parameters.Add(new SQLiteParameter("@IsAccess12", savedProject.IsAccess12));
			commandInsert.Parameters.Add(new SQLiteParameter("@UseADODB", savedProject.UseADODB));
			commandInsert.Parameters.Add(new SQLiteParameter("@SQLiteDatabasePath", savedProject.SQLiteDatabasePath));
			commandInsert.Parameters.Add(new SQLiteParameter("@SQLiteTableName", savedProject.SQLiteTableName));
			commandInsert.Parameters.Add(new SQLiteParameter("@XMLDatabasePath", savedProject.XMLDatabasePath));
			commandInsert.Parameters.Add(new SQLiteParameter("@XMLTableName", savedProject.XMLTableName));
			commandInsert.Parameters.Add(new SQLiteParameter("@XMLNameSpace", savedProject.XMLNameSpace));
			commandInsert.Parameters.Add(new SQLiteParameter("@XMLDataSetName", savedProject.XMLDataSetName));

			return commandInsert;
		}

		//	GetDBConnection
		internal static SQLiteConnection GetDBConnection()
		{
			string connectionString = "Data Source = ";
			connectionString += m_DBPath;
			SQLiteConnection connection = null;
			try
			{
				connection = new SQLiteConnection(connectionString);
			}
			catch
			{
			}
			return connection;
		}

		//	GetRecord (From Key Field)
		internal static void GetRecord(Int32 recordNumber, JSavedProject savedProject)
		{
			//	Create the SelectCommand
			string selectString = "SELECT *  FROM " + m_TableName;
			selectString += " WHERE RecordNumber = ";
			selectString += recordNumber.ToString();

			GetSingleRecord(selectString, ref savedProject);
		}

		//	GetRecord (From string Override)
		internal static void GetRecord(string className, JSavedProject savedProject)
		{
			//	Create the SelectCommand.
			string selectString = "SELECT *  FROM " + m_TableName;
			selectString += " WHERE ClassName = " + "\"" + className + "\"";

			GetSingleRecord(selectString, ref savedProject);
		}

		//	GetRecordDetails
		private static bool GetRecordDetails(DataRow dataRow, ref JSavedProject savedProject)
		{
			bool result = true;

			//	Use try catch for numeric fields which may not have been initialised

			try
			{
				savedProject.RecordNumber = Convert.ToInt32(dataRow["RecordNumber"]);
			}
			catch { }
			savedProject.LastUpdated = Convert.ToString(dataRow["LastUpdated"]);
			savedProject.ClassNameSpace = Convert.ToString(dataRow["ClassNameSpace"]);
			savedProject.ClassName = Convert.ToString(dataRow["ClassName"]);
			savedProject.ClassFileSaveDirectory = Convert.ToString(dataRow["ClassFileSaveDirectory"]);
			try
			{
				savedProject.ClassDataSource = (JCommon.ClassDataTypes)Convert.ToInt32(dataRow["ClassDataSource"]);
			}
			catch { }
			savedProject.ClassScope = Convert.ToString(dataRow["ClassScope"]);
			savedProject.ModuleVariablePrefix = Convert.ToString(dataRow["ModuleVariablePrefix"]);
			savedProject.AdditionalFunctions = Convert.ToString(dataRow["AdditionalFunctions"]);
			savedProject.AdditionalFields = Convert.ToString(dataRow["AdditionalFields"]);
			savedProject.AccessDatabasePath = Convert.ToString(dataRow["AccessDatabasePath"]);
			savedProject.AccessTableName = Convert.ToString(dataRow["AccessTableName"]);
			savedProject.IsAccess12 = Convert.ToBoolean(dataRow["IsAccess12"]);
			savedProject.UseADODB = Convert.ToBoolean(dataRow["UseADODB"]);
			savedProject.SQLiteDatabasePath = Convert.ToString(dataRow["SQLiteDatabasePath"]);
			savedProject.SQLiteTableName = Convert.ToString(dataRow["SQLiteTableName"]);
			savedProject.XMLDatabasePath = Convert.ToString(dataRow["XMLDatabasePath"]);
			savedProject.XMLTableName = Convert.ToString(dataRow["XMLTableName"]);
			savedProject.XMLNameSpace = Convert.ToString(dataRow["XMLNameSpace"]);
			savedProject.XMLDataSetName = Convert.ToString(dataRow["XMLDataSetName"]);

			return result;
		}

		//	GetRecordDetailsForIndexdata
		private static bool GetRecordDetailsForIndexdata(DataRow dataRow, ref JSavedProject.JSavedProjectIndexData indexData)
		{
			bool result = true;

			indexData.RecordNumber = Convert.ToInt32(dataRow["RecordNumber"]);
			indexData.ClassName = Convert.ToString(dataRow["ClassName"]);

			return result;
		}

		//	Returns required records in a List
		internal static List<JSavedProject> GetRecordList(string selectString)
		{
			List<JSavedProject> listRecords = new List<JSavedProject>();
			JSavedProject savedProject;

			//	Create Connection
			using (SQLiteConnection dbConnection = GetDBConnection())
			{
				dbConnection.Open();

				SQLiteDataAdapter dbDataAdapter = CreateSelectAdapter(dbConnection, selectString);

				//	Create / Fill the dataset
				DataSet dataSet = new DataSet();
				dbDataAdapter.Fill(dataSet, m_TableName);

				//	Get the Table from the Dataset
				DataTable dataTable = dataSet.Tables[0];

				// Loop through the Dataset and add each Row to the List
				foreach (DataRow dataRow in dataTable.Rows)
				{
					savedProject = new JSavedProject();
					GetRecordDetails(dataRow, ref savedProject);
					listRecords.Add(savedProject);
				}
			}
			return listRecords;
		}

		//	GetSingleRecord
		internal static JSavedProject GetSingleRecord(string selectString)
		{
			JSavedProject savedProject = new JSavedProject();

			//	Create Connection
			using (SQLiteConnection dbConnection = GetDBConnection())
			{
				dbConnection.Open();

				SQLiteDataAdapter dbDataAdapter = CreateSelectAdapter(dbConnection, selectString);

				//	Create / Fill the dataset
				DataSet dataSet = new DataSet();
				dbDataAdapter.Fill(dataSet, m_TableName);

				//	Get the Table from the Dataset
				DataTable dataTable = dataSet.Tables[0];

				if (dataTable.Rows.Count > 0)
				{
					DataRow dataRow = dataTable.Rows[0];
					GetRecordDetails(dataRow, ref savedProject);
				}
			}
			return savedProject;
		}

		//	GetSingleRecord
		private static void GetSingleRecord(string selectString, ref JSavedProject savedProject)
		{
			//	Create Connection
			using (SQLiteConnection dbConnection = GetDBConnection())
			{
				dbConnection.Open();

				SQLiteDataAdapter dbDataAdapter = CreateSelectAdapter(dbConnection, selectString);

				//	Create / Fill the dataset
				DataSet dataSet = new DataSet();
				dbDataAdapter.Fill(dataSet, m_TableName);

				//	Get the Table from the Dataset
				DataTable dataTable = dataSet.Tables[0];

				if (dataTable.Rows.Count > 0)
				{
					DataRow dataRow = dataTable.Rows[0];
					GetRecordDetails(dataRow, ref savedProject);
				}
			}
		}

		//	GetUpdateCommand
		private static SQLiteCommand GetUpdateCommand(JSavedProject savedProject)
		{
			string cmdText;

			cmdText = "UPDATE " + m_TableName;
			cmdText += " set LastUpdated = ?,";
			cmdText += " ClassNameSpace = ?,";
			cmdText += " ClassName = ?,";
			cmdText += " ClassFileSaveDirectory = ?,";
			cmdText += " ClassDataSource = ?,";
			cmdText += " ClassScope = ?,";
			cmdText += " ModuleVariablePrefix = ?,";
			cmdText += " AdditionalFunctions = ?,";
			cmdText += " AdditionalFields = ?,";
			cmdText += " AccessDatabasePath = ?,";
			cmdText += " AccessTableName = ?,";
			cmdText += " IsAccess12 = ?,";
			cmdText += " UseADODB = ?,";
			cmdText += " SQLiteDatabasePath = ?,";
			cmdText += " SQLiteTableName = ?,";
			cmdText += " XMLDatabasePath = ?,";
			cmdText += " XMLTableName = ?,";
			cmdText += " XMLNameSpace = ?,";
			cmdText += " XMLDataSetName = ?";
			cmdText += " WHERE RecordNumber = ";
			cmdText += savedProject.RecordNumber.ToString();

			// Create the UpdateCommand
			SQLiteCommand commandUpdate = new SQLiteCommand(cmdText);

			commandUpdate.Parameters.Add(new SQLiteParameter("LastUpdated", DateTime.Now.ToString()));
			commandUpdate.Parameters.Add(new SQLiteParameter("ClassNameSpace", savedProject.ClassNameSpace));
			commandUpdate.Parameters.Add(new SQLiteParameter("ClassName", savedProject.ClassName));
			commandUpdate.Parameters.Add(new SQLiteParameter("ClassFileSaveDirectory", savedProject.ClassFileSaveDirectory));
			commandUpdate.Parameters.Add(new SQLiteParameter("ClassDataSource", savedProject.ClassDataSource));
			commandUpdate.Parameters.Add(new SQLiteParameter("ClassScope", savedProject.ClassScope));
			commandUpdate.Parameters.Add(new SQLiteParameter("ModuleVariablePrefix", savedProject.ModuleVariablePrefix));
			commandUpdate.Parameters.Add(new SQLiteParameter("AdditionalFunctions", savedProject.AdditionalFunctions));
			commandUpdate.Parameters.Add(new SQLiteParameter("AdditionalFields", savedProject.AdditionalFields));
			commandUpdate.Parameters.Add(new SQLiteParameter("AccessDatabasePath", savedProject.AccessDatabasePath));
			commandUpdate.Parameters.Add(new SQLiteParameter("AccessTableName", savedProject.AccessTableName));
			commandUpdate.Parameters.Add(new SQLiteParameter("IsAccess12", savedProject.IsAccess12));
			commandUpdate.Parameters.Add(new SQLiteParameter("UseADODB", savedProject.UseADODB));
			commandUpdate.Parameters.Add(new SQLiteParameter("SQLiteDatabasePath", savedProject.SQLiteDatabasePath));
			commandUpdate.Parameters.Add(new SQLiteParameter("SQLiteTableName", savedProject.SQLiteTableName));
			commandUpdate.Parameters.Add(new SQLiteParameter("XMLDatabasePath", savedProject.XMLDatabasePath));
			commandUpdate.Parameters.Add(new SQLiteParameter("XMLTableName", savedProject.XMLTableName));
			commandUpdate.Parameters.Add(new SQLiteParameter("XMLNameSpace", savedProject.XMLNameSpace));
			commandUpdate.Parameters.Add(new SQLiteParameter("XMLDataSetName", savedProject.XMLDataSetName));

			return commandUpdate;
		}

		//	UpdateField
		internal static bool UpdateField(Int32 recordNumber, string fieldName, object value)
		{
			// Create the UpdateCommand
			string cmdText = "UPDATE " + m_TableName;
			cmdText += " set " + fieldName + " = ?";
			cmdText += " WHERE RecordNumber = ";
			cmdText += recordNumber.ToString();

			try
			{
				//	Create Connection)
				using (SQLiteConnection dbConnection = GetDBConnection())
				{
					dbConnection.Open();

					SQLiteCommand commandUpdate = new SQLiteCommand(cmdText, dbConnection);
					commandUpdate.Parameters.Add(new SQLiteParameter(fieldName, value));

					//	Execute
					commandUpdate.ExecuteNonQuery();
				}
				return true;
			}
			catch
			{
				return false;
			}
		}

		internal static bool UpdateRecord(JSavedProject savedProject)
		{
			//	Update Only - Use AddRecord for new records
			bool result = false;

			//	Create Connection
			using (SQLiteConnection dbConnection = GetDBConnection())
			{
				dbConnection.Open();

				SQLiteCommand command = GetUpdateCommand(savedProject);
				command.Connection = dbConnection;

				//Execute
				try
				{
					command.ExecuteNonQuery();
					result = true;
				}
				catch
				{
					result = false;
				}

			}
			return result;
		}

	}



	#region Additional Functions Class


	static class JSavedProjectFunctionsSQLite
	{
	}


	#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