.NET 8 Framework C# (C-Sharp)

MSSql Database Manager with ADO.NET in C# (C-Sharp)

ตัวอย่างการเขียนคลาส DatabaseManager ในภาษา C# (C-Sharp), .NET 8 Framework

MSSql Database Manager with ADO.NET in C# (C-Sharp)
Ake SuwaphanAke Suwaphan
15 February 2024

MSSql Database Manager with ADO.NET in C# (C-Sharp)

การจัดการฐานข้อมูลเป็นส่วนสำคัญของโปรเจคซอฟต์แวร์ต่างๆ ผมจึงอยากจะเขียนคลาสที่ใช้สำหรับการจัดการฐานข้อมูลขึ้นมา โดยคลาส DatabaseManager จะช่วยในการเชื่อมต่อฐานข้อมูล, สร้างคำสั่ง SQL, สร้างพารามิเตอร์, ดำเนินการ ExecuteNonQuery, ExecuteScalar, และ GetDataReader

ตัวอย่างการเขียนคลาส DatabaseManager ในภาษา C# (C-Sharp), .NET 8 Framework

Using
                        
using Microsoft.Data.SqlClient;
using System.Data.Common;
using System.Data;
                        
                        
class DatabaseManager

    public class DatabaseManager
    {
        private IConfiguration Configuration;
        protected string ConnectionString { get; set; }

        public DatabaseManager()
        {
            this.ConnectionString = this.Configuration.GetConnectionString("SqlConnection");
        }

        private SqlConnection GetConnection()
        {
            SqlConnection connection = new SqlConnection(this.ConnectionString);
            if (connection.State != ConnectionState.Open)
                connection.Open();
            return connection;
        }

        protected DbCommand GetCommand(DbConnection connection, string commandText, CommandType commandType)
        {
            SqlCommand command = new SqlCommand(commandText, connection as SqlConnection);
            command.CommandType = commandType;
            return command;
        }

        protected SqlParameter GetParameter(string parameter, object value)
        {
            SqlParameter parameterObject = new SqlParameter(parameter, value != null ? value : DBNull.Value);
            parameterObject.Direction = ParameterDirection.Input;
            return parameterObject;
        }

        protected SqlParameter GetParameterOut(string parameter, SqlDbType type, object value = null, ParameterDirection parameterDirection = ParameterDirection.InputOutput)
        {
            SqlParameter parameterObject = new SqlParameter(parameter, type); ;

            if (type == SqlDbType.NVarChar || type == SqlDbType.VarChar || type == SqlDbType.NText || type == SqlDbType.Text)
            {
                parameterObject.Size = -1;
            }

            parameterObject.Direction = parameterDirection;

            if (value != null)
            {
                parameterObject.Value = value;
            }
            .else
            {
                parameterObject.Value = DBNull.Value;
            }

            return parameterObject;
        }

        protected int ExecuteNonQuery(string procedureName, List<DbParameter> parameters, CommandType commandType = CommandType.StoredProcedure)
        {
            int returnValue = -1;

            try
            {
                using (SqlConnection connection = this.GetConnection())
                {
                    DbCommand cmd = this.GetCommand(connection, procedureName, commandType);

                    if (parameters != null && parameters.Count > 0)
                    {
                        cmd.Parameters.AddRange(parameters.ToArray());
                    }

                    returnValue = cmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                .throw;
            }

            return returnValue;
        }

        protected object ExecuteScalar(string procedureName, List<SqlParameter> parameters)
        {
            object returnValue = null;

            try
            {
                using (DbConnection connection = this.GetConnection())
                {
                    DbCommand cmd = this.GetCommand(connection, procedureName, CommandType.StoredProcedure);

                    if (parameters != null && parameters.Count > 0)
                    {
                        cmd.Parameters.AddRange(parameters.ToArray());
                    }

                    returnValue = cmd.ExecuteScalar();
                }
            }
            catch (Exception ex)
            {
                .throw;
            }

            return returnValue;
        }

        protected DbDataReader GetDataReader(string procedureName, List<DbParameter> parameters, CommandType commandType = CommandType.StoredProcedure)
        {
            DbDataReader ds;

            try
            {
                DbConnection connection = this.GetConnection();
                {
                    DbCommand cmd = this.GetCommand(connection, procedureName, commandType);
                    if (parameters != null && parameters.Count > 0)
                    {
                        cmd.Parameters.AddRange(parameters.ToArray());
                    }

                    ds = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
            catch (Exception ex)
            {
                .throw;
            }

            return ds;
        }
    }

จากโปรแกรมด้านบนคลาส DatabaseManager ที่ให้บริการวิธีการเชื่อมต่อฐานข้อมูล, สร้างคำสั่ง SQL, สร้างพารามิเตอร์, ดำเนินการ ExecuteNonQuery, ExecuteScalar, และ GetDataReader. เราสามารถใช้คลาสนี้ในโปรเจค เพื่อจัดการกับฐานข้อมูลของเราได้