Click here to Skip to main content
15,896,915 members
Articles / Web Development / ASP.NET

SmartCodeGenerator – Drive Code Generation with XML. Transform XML with ASP.NET instead of XSLT.

Rate me:
Please Sign up or sign in to vote.
2.81/5 (9 votes)
27 Oct 2008CPOL9 min read 57K   418   65  
This article describes how we can drive codegeneration with xml. Shows step by step instruction of how to generate strongly typed objects from XSD. ASP.NET developers can also use this paper as reference, who wants to transform xml using ASP.NET instead of XSLT.
//---------------------------------------------------------------------------------------
//Originally written by The Austin Conner Group. I modified according to my needs to fit
//SmartCodeGenerator Framework
//Shahed Khan
//12 April 2007
//---------------------------------------------------------------------------------------
// Copyright Notice
// This file contains proprietary information of The Austin Conner Group.
// Copying or reproduction without prior written approval is prohibited.
// Copyright (C) 2004 The Austin Conner Group. All rights reserved.
// 
// The above copyright notice and this permission notice shall be included in all 
// copies or substantial portions of the Software.
//
// Redistribution and use in source and binary forms, with or without modification, 
// are permitted provided that the following conditions are met: 
// 
// * Redistributions of source code must retain the above copyright notice, this list 
//   of conditions and the following disclaimer. 
//
// * Redistributions in binary form must reproduce the above copyright notice, this list 
//   of conditions and the following disclaimer in the documentation and/or other materials 
//   provided with the distribution. 
//
// * Neither the name of The Austin Conner Group nor the names of its contributors may be 
//   used to endorse or promote products derived from this software without specific prior 
//   written permission. 
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 
// OR OTHER DEALINGS IN THE SOFTWARE.
//---------------------------------------------------------------------------------------
// History
//    11/18/2004  The Austin Conner Group - J.R. Hull  - Original Version
//---------------------------------------------------------------------------------------

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Collections.Specialized;

namespace Sample.Objects.DataAccess
{
	/// <summary>
	/// Summary description for BaseDataClass.
	/// </summary>
	public class BaseDataClass
	{

		/// <summary/>
		private string connectionString ;
		/// <summary/>
		public string ConnectionString 
		{
			get 
			{
				string str = ConfigurationSettings.AppSettings["ConnectionString"];
				if (str==null || str.Length <=0)
					throw (new ApplicationException("Connection String configuration is missing from config. "));
				else
					return (str);
			}
			set 
			{
				connectionString = value;
			}
		}

		/// <summary>
		/// The GenerateCollectionFromReader delegate represents any method
		/// which returns a collection from a SQL Data Reader.
		/// </summary>
		public delegate CollectionBase GenerateCollectionFromReader(SqlDataReader returnData);

		/// <summary>
		/// The GenerateObjectFromReader delegate represents any method
		/// which returns a object from a SQL Data Reader.
		/// </summary>
		public delegate Object GenerateObjectFromReader(SqlDataReader returnData);

		/// <summary>
		/// Adds a parameter to a SqlCommand
		/// </summary>
		/// <param name="sqlCmd">SqlCommand</param>
		/// <param name="paramId"></param>
		/// <param name="sqlType"></param>
		/// <param name="paramSize"></param>
		/// <param name="paramDirection"></param>
		/// <param name="paramvalue"></param>
		public void AddParamToSQLCmd(SqlCommand sqlCmd, string paramId, SqlDbType sqlType, int paramSize, ParameterDirection paramDirection, object paramvalue) 
		{
			// Validate Parameter Properties
			if (sqlCmd== null)
				throw (new ArgumentNullException("sqlCmd"));
			if (paramId == string.Empty)
				throw (new ArgumentOutOfRangeException("paramId"));

			// Add Parameter
			SqlParameter newSqlParam = new SqlParameter();
			newSqlParam.ParameterName= paramId;
			newSqlParam.SqlDbType = sqlType;
			newSqlParam.Direction = paramDirection;

			if (paramSize > 0)
				newSqlParam.Size=paramSize;

			if (paramvalue != null)
				newSqlParam.Value = paramvalue;

			sqlCmd.Parameters.Add (newSqlParam);
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="sqlCmd"></param>
		/// <returns></returns>
		public Object ExecuteObjectReader(SqlCommand sqlCmd, GenerateObjectFromReader gofr)
		{
			// Validate Command Properties
			if (ConnectionString == string.Empty)
				throw (new ArgumentOutOfRangeException("ConnectionString"));

			if (sqlCmd== null)
				throw (new ArgumentNullException("sqlCmd"));

			//The C# using block guarantees that the Dispose method is called o
			using (SqlConnection cn = new SqlConnection(this.ConnectionString)) 
			{
				sqlCmd.Connection = cn;
				cn.Open();
				Object temp = gofr(sqlCmd.ExecuteReader());
				return (temp);
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="sqlCmd"></param>
		/// <returns></returns>
		public Object ExecuteCollectionReader(SqlCommand sqlCmd, GenerateCollectionFromReader gcfr)
		{
			// Validate Command Properties
			if (ConnectionString == string.Empty)
				throw (new ArgumentOutOfRangeException("ConnectionString"));

			if (sqlCmd== null)
				throw (new ArgumentNullException("sqlCmd"));

			//The C# using block guarantees that the Dispose method is called o
			using (SqlConnection cn = new SqlConnection(this.ConnectionString)) 
			{
				sqlCmd.Connection = cn;
				cn.Open();
				Object temp = gcfr(sqlCmd.ExecuteReader());
				return (temp);
			}
		}

		/// <summary>
		/// Executes the query, and returns the first column of the first row in the 
		/// result set returned by the query. Extra columns or rows are ignored.
		/// </summary>
		/// <param name="sqlCmd"></param>
		/// <returns></returns>
		public Object ExecuteScalarCmd(SqlCommand sqlCmd) 
		{
			// Validate Command Properties
			if (ConnectionString == string.Empty)
				throw (new ArgumentOutOfRangeException("ConnectionString"));

			if (sqlCmd== null)
				throw (new ArgumentNullException("sqlCmd"));

			Object result = null;

			//The C# using block guarantees that the Dispose method is called 
			using (SqlConnection cn = new SqlConnection(this.ConnectionString)) 
			{
				sqlCmd.Connection = cn;
				cn.Open();
				result = sqlCmd.ExecuteScalar();
			}

			return result;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="sqlCmd"></param>
		/// <param name="gcfr"></param>
		/// <returns></returns>
		public CollectionBase ExecuteReaderCmd(SqlCommand sqlCmd, GenerateCollectionFromReader gcfr) 
		{
			if (ConnectionString == string.Empty)
				throw (new ArgumentOutOfRangeException("ConnectionString"));

			if (sqlCmd== null)
				throw (new ArgumentNullException("sqlCmd"));

			//The C# using block guarantees that the Dispose method is called
			using (SqlConnection cn = new SqlConnection(this.ConnectionString)) 
			{
				sqlCmd.Connection = cn;
				cn.Open();
				CollectionBase temp = gcfr(sqlCmd.ExecuteReader());
				return (temp);
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="sqlCmd"></param>
		/// <param name="cmdType"></param>
		/// <param name="cmdText"></param>
		public void SetCommandType(SqlCommand sqlCmd, CommandType cmdType, string cmdText) 
		{
			sqlCmd.CommandType = cmdType;
			sqlCmd.CommandText = cmdText;
		}
	}
}

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
Web Developer
Australia Australia
I have been awarded MVP (Visual C#) for year 2007, 2008, 2009. I am a Microsoft Certified Application Developer (C# .Net). I currently live in Melbourne, Australia. I am a co-founder and core developer of Pageflakes www.pageflakes.com and Founder of Simplexhub, a highly experienced software development company based in Melbourne Australia and Dhaka, Bangladesh. Simplexhub.
My BLOG http://www.geekswithblogs.net/shahed
http://msmvps.com/blogs/shahed/Default.aspx.

Comments and Discussions