Thursday, November 11, 2010

Generic Data Link Layer

 This Data Link Layer returns Objects of the Classes. I tried to give a generic look so tht it can be used in any project. It will require small changes.


using System;
using System.Data;
//using System.Configuration;
using System.Linq;
//using System.Web;
//using System.Xml.Linq;
using System.Data.SqlClient;
using McAfee.Utilities.DatabaseHelper;
using System.Collections.Generic;

namespace Blog.BO
{
    ///
    /// Summary description for Database_Connection
    ///

    public class Database_Connection
    {
        private string sql_Connection_String = new ConnectionString().GetConnectionString();
        public List Connection_Select_Database(Type objType, string sqlQuery,int input_Size ,params string[] parameters_List)         {             List listObjects = new List(2);             string objecttype = objct_type(objType);             SqlCommand sql_command = sql_command_builder(sqlQuery,input_Size, parameters_List);             if (sql_command == null) return null;             try             {                 using (SqlConnection conn = new SqlConnection(sql_Connection_String))                 {                     sql_command.Connection = conn;                     conn.Open();                     SqlDataReader rdr;                     using (rdr = sql_command.ExecuteReader())                     {                         List reader_names = new List(2);                                              DataTable schema = rdr.GetSchemaTable();                         foreach (DataRow row in schema.Rows)                         {                             reader_names.Add((string)row.ItemArray[0]);                         }                         while (rdr.Read())                         {                             switch (objecttype)                             {                                 case "User": listObjects.Add(new UserObject_Logic().Forobject(rdr, reader_names));                                     break;                                 case "Article": listObjects.Add(new ArticleObject_Logic().Forobject(rdr, reader_names));                                     break;                                 case "Comment": listObjects.Add(new CommentObject_Logic().Forobject(rdr, reader_names));                                     break;                             }                         }                     }                                         return listObjects;                 }             }             catch             {                 return null;             }         }         public List Add_into_List(SqlDataReader rdr, Type object_Type)         {             List listObjects = new List(2);             List reader_names = new List(2);             string typeObject = objct_type(object_Type);             DataTable schema = rdr.GetSchemaTable();             foreach (DataRow row in schema.Rows)             {                 reader_names.Add((string)row.ItemArray[0]);             }             while (rdr.Read())             {                 switch (typeObject)                 {                     case "User": listObjects.Add(new UserObject_Logic().Forobject(rdr, reader_names));                         break;                     case "Article": listObjects.Add(new ArticleObject_Logic().Forobject(rdr, reader_names));                         break;                     case "Comment": listObjects.Add(new CommentObject_Logic().Forobject(rdr, reader_names));                         break;                 }             }             return listObjects;         }         public SqlParameter[] Default_Parameter(SqlParameter[] sqlParams, int input_size)         {             if(sqlParams==null)             {             sqlParams = new SqlParameter[1];             }             int len = sqlParams.Length;             sqlParams[len-1] = new SqlParameter("@return", SqlDbType.Int, input_size);             sqlParams[len-1].Direction = ParameterDirection.ReturnValue;             return sqlParams;         }         public List Exec_Select_Query(string stored_Procdure_Name,SqlParameter[] sql_Params,Type object_Type,int input_Size)         {                            sql_Params = Default_Parameter(sql_Params,input_Size);             int returnvalue = -1;             List Objects;             SqlDataReader rdr;             using (rdr = SQLHelper.ExecuteReader(new ConnectionString().GetConnectionString(), CommandType.StoredProcedure, stored_Procdure_Name, out returnvalue, sql_Params))             {                 Objects = Add_into_List(rdr, object_Type);             }             return Objects;         }         protected string objct_type(Type obj)         {             if (obj == typeof(UserObject))                 return "User";             if (obj == typeof(ArticleObject))                 return "Article";             return "Comment";         }         public int Connection_Del_Inset_Update(string sqlQuery,int input_Size, params string[] parameters_list)         {             int result = 0;             SqlCommand sql_command = sql_command_builder(sqlQuery,input_Size ,parameters_list);             if (sql_command == null) return 0;             try             {                 using (SqlConnection conn = new SqlConnection(sql_Connection_String))                 {                     sql_command.Connection = conn;                     conn.Open();                     result = sql_command.ExecuteNonQuery();                     return result;                 }             }             catch             {                 return 0;             }         }         public SqlCommand sql_command_builder(string sql_Query,int input_Size, params string[] parameters_list)         {             SqlCommand sql_command = new SqlCommand(sql_Query);             SqlParameter parameter_value;             string[] parameters_name = sql_Query.Split(new char[] { '=', ' ', '(', ')', ',' });             List oparam = new List();             int index = 0;             foreach (string parameter in parameters_name)             {                 if (parameter.Contains('@')) oparam.Add(parameter);             }             if (parameters_list.Count() != oparam.Count())                 return null;             foreach (string parameter in parameters_list)             {                 parameter_value = new SqlParameter(oparam[index], parameter);                                 parameter_value.DbType = DbType.String;                 parameter_value.Size = input_Size;                 sql_command.Parameters.Add(parameter_value);                 index++;             }             return sql_command;         }     } }             
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Class Logic



public UserObject Forobject(SqlDataReader reader, List names)//(string name, object val)
        {
            UserObject new_User = new UserObject();
            foreach (string name in names)
            {
                switch (name)
                {
                    case "userId": new_User.UserId = (string)reader[name];
                        break;
                    case "username": new_User.UserName = (string)reader[name];
                        break;
                }
            }
            return new_User;
        }
              
      
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Class

 public class UserObject
    {
        public string UserName { get; set; }
        public string UserId { get; set; }
        public string Password { get; set; }
    

    } 
   

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Example which uses this:

public List GetData()
        {
            int input_Size = 10;
            SqlParameter[] sql_Param= null;
            List dataResult = new Database_Connection().Exec_Select_Query(Stored_Procedure_Names.GetUsersInfo, sql_Param, object_Type, input_Size);//(typeof(ArticleObject), sqlQuery, input_Size, article.ArticleId.ToString());             if (dataResult == null) return null;             List users = new List(2);             if (dataResult == null) return null;             foreach (Object obj in dataResult)             {                 users.Add((UserObject)obj);             }             return users;             //List objects;             //string sqlQuery = "select userId,username from userinfo where userId <> 'admin'";             //int input_Size = 10;             //objects = new Database_Connection().Connection_Select_Database(typeof(UserObject), sqlQuery, input_Size);         }

No comments:

Post a Comment