ලේසියෙන්ම හොයාගන්න මෙතනින්

C# Project එක, SQL Server Database එකක් සමග Connect කරමු.

C# project එකකට ලේසිම ලේසි විදිහකට, SQL Server වල create කරලා තියෙන Database එකකට connect වෙන හැටි තමා මෙතැනින් කියලා දෙන්න යන්නේ. ඒ වගේම Connection එකක් හදාගත්තට පස්සේ එකෙන් data select කර ගන්නත්, data insert, update, delete යන 3ම කරන්නත් ලේසිම විදියක් කියල දෙන්නයි.
මුලින්ම ඔයාලගේ Visual Studio වල Solution Explorer window එකේ C# project නම උඩ right click කරලා, Add --> New Item යන්න තෝරන්න. හෝ Ctrl+Shift+A.
දැන් ලැබෙන Window එකෙන්, Class යන්න තෝරන්න. පහලින් කැමති නමක් දෙන්න. මම මෙහිදී DB_Access හා DB_Connect ලෙස මේ ආකාරයටම Class file 2 ක් create කරමි.
මෙයට හේතුව, එක් Class file එකක්(DB_Connect.cs) SQL Server database එකට connection එක create කිරීමටත්, අනෙක් Class file එක (DB_Access.cs) ඒ create කරගත් database connection එකට සිදුකිරීමට අවශ්‍ය වෙනස්කම් සඳහා සියලුම method ලිවීම සඳහාය. එමගින් එකම Code එක නැවත නැවත ලිවීම මෙන්ම, එකම ආකාරයේ වැඩ කිහිපයක් සඳහා ලියන method ප්‍රමාණය අඩු කරගත හැකිවීමත්, අවශ්‍ය වූ විට query එක පමණක් වෙනස් කර, අඩු method සංඛ්‍යාවකින් වැඩි වැඩ ප්‍රමාණයක් කරගන්නට හැකි වීමත්, මේ සියල්ලම නිසා ගතවන කාලය සහ, developer වන ඔයාගේ මහන්සියත් අඩුකිරිමයි.
අපි මුලින්ම DB_Connect.cs class file එක ගැන බලමු.

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Xml.Linq;
using System.Data.SqlClient;

public class DB_Connect
{
    public static SqlConnection ConnectHansA;
    public static string connectionString = "Data Source=HansA-ACER\\SQLEXPRESS; Initial Catalog= KATTCAR; Integrated Security=True ";

    public static SqlConnection GetConnection()
    {
        ConnectHansA = new SqlConnection(connectionString);
        return ConnectHansA;
    }
}
මෙහි Data Source යන්නෙහි දැක්වෙන්නේ ඔයාගේ SQL Server Name එකයි. (SQL Server Management Studio open කරනකොට පෙනේවි.) මෙහි දැක්වෙන්නේ Windows Authentication සඳහා coding පියවරයන්ය. \\ (ඇල ඉරි) 2 ක් යොදා ඇත්තේ, තනි \ ලකුණ escape sequence එකක් ලෙස හදුනා ගන්න නිසා, තවත් \ ලකුණක් ලබාදී '\' ලකුණක් ඇති බව ලබා දීමයි. Initial Catalog යන්නෙහි සඳහන් වන්නේ අදාල Server එක තුල අපට අවශ්‍ය කරන, යොදාගන්නා database එකේ නමයි. ඔය ටික හදුන්වනවා Connection String එක කියල. ඒක වෙනම variable එකකට save කරගන්නවා. පසුව return type එක SqlConnection එකක් වන GetConnection() method එක implement කරමි. එහිදී SqlConnection object එකක් හදාගෙන එයට අර connection String එක parse කරනු ලබනවා.
දැන් බලමු DB_Access.cs කියන class එක ගැන.

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Xml.Linq;
using System.Data.SqlClient;

public class DB_Access
{
    SqlConnection Connect_HansA;
    public DB_Access()
    {
        Connect_HansA = DB_Connect.GetConnection();
    }


    public bool insertData(string existsQuery, string insertQuery)
    {
        bool status = false;
        if (Connect_HansA.State.ToString() == "Closed")
        {
            Connect_HansA.Open();
        }
        SqlCommand checkExists = Connect_HansA.CreateCommand();
        checkExists.Connection = Connect_HansA;
        checkExists.CommandType = CommandType.Text;
        checkExists.CommandText = existsQuery;
        SqlDataReader existsResults = checkExists.ExecuteReader();
        if (existsResults.HasRows)
        {
            status = false;
            existsResults.Close();
        }
        else
        {
            existsResults.Close();
            SqlCommand doInsert = Connect_HansA.CreateCommand();
            doInsert.Connection = Connect_HansA;
            doInsert.CommandType = CommandType.Text;
            doInsert.CommandText = insertQuery;
            doInsert.ExecuteNonQuery();
            status = true;
        }
        existsResults.Close();
        Connect_HansA.Close();
        return status;
    }


    public bool updateData(string query)
    {
        bool status = false;
        if (Connect_HansA.State.ToString() == "Closed")
        {
            Connect_HansA.Open();
        }
        SqlCommand doUpdate = Connect_HansA.CreateCommand();
        doUpdate.Connection = Connect_HansA;
        doUpdate.CommandType = CommandType.Text;
        doUpdate.CommandText = query;
        doUpdate.ExecuteNonQuery();
        status = true;
        Connect_HansA.Close();
        return status;
    }


    public bool deleteData(string query)
    {
        bool status = false;
        if (Connect_HansA.State.ToString() == "Closed")
        {
            Connect_HansA.Open();
        }
        SqlCommand doDelete = Connect_HansA.CreateCommand();
        doDelete.Connection = Connect_HansA;
        doDelete.CommandType = CommandType.Text;
        doDelete.CommandText = query;
        doDelete.ExecuteNonQuery();
        status = true;
        Connect_HansA.Close();
        return status;
    }


    public string authentication(string authenticateQuery, string returnMeThisNamedColumnData)
    {
        if (Connect_HansA.State.ToString() == "Closed")
        {
            Connect_HansA.Open();
        }
        SqlCommand checkAuthenticate = Connect_HansA.CreateCommand();
        checkAuthenticate.Connection = Connect_HansA;
        checkAuthenticate.CommandType = CommandType.Text;
        checkAuthenticate.CommandText = authenticateQuery;
        SqlDataReader authenticateResult = checkAuthenticate.ExecuteReader();
        string returnMe = "";
        while (authenticateResult.Read())
        {
            returnMe = authenticateResult[returnMeThisNamedColumnData].ToString();
        }


        if (authenticateResult.HasRows)
        {
            Connect_HansA.Close();
            return returnMe;
        }
        else
        {
            returnMe = "NO";
        }
        authenticateResult.Close();
        Connect_HansA.Close();
        return returnMe;
    }


    public DataTable selectDataSet(string selectQuery)
    {
        if (Connect_HansA.State.ToString() == "Closed")
        {
            Connect_HansA.Open();
        }
        SqlCommand doSelectDataSet = Connect_HansA.CreateCommand();
        doSelectDataSet.Connection = Connect_HansA;
        doSelectDataSet.CommandType = CommandType.Text;
        doSelectDataSet.CommandText = selectQuery;
        DataSet dataSet = new DataSet();
        SqlDataAdapter dataAdapter = new SqlDataAdapter(doSelectDataSet);
        DataTable dataTable = new DataTable();
        dataAdapter.Fill(dataTable);
        Connect_HansA.Close();
        return dataTable;
    }

}
මේකෙදි select, insert, update, delete වලට වෙන වෙනම method 4 ක් ලියලා තියෙනවා. කොතැන, මොන data select කරන වැඩකට, data insert, update, delete කරන වැඩකට මේ method 4 පමණක් යොදාගෙන වැඩ ගන්න පුළුවන්. ඒ වගේම Login එකක් සඳහා authentication check කරන්න method එකක්ද ලියලා තියෙනවා. ඔයාලට කරන්න තියෙන්නේ Database access කරන්න ඕන query එක හරියටම හරියට ලියල මේ අවශ්‍ය method එකට parse කරන්න විතරයි.
මුලින්ම insetData method එක ගැන කතා කරමු. මේකට මං parse කරනවා parameter 2 ක් විදිහට Query 2 ක්. මුල්ම එකතමා insert කරන්න කලින් ඒ save කරන්න යන data set එකේ primary key එකට සමාන primary data එකක් තියෙනවද කියල බලාගන්න එවන query එක. දෙවෙනි එක තමා, data insert කරන්න ලියල එවන query එක. 
මේ හැම code එකක්ම මම තනියම කරලා, තනියෙන් අත්හදා බලලා තමා ඔයාලට ඉදිරිපත් කරන්නේ. ඒ නිසා මේවා ඉතා නිවැරිදි. ඒ වගේම මේ code ඔයාලට කැමති විදිහට වෙනස් කරගන්න. මේ විදිහටම කරන්න කොටු වෙන්න ඕන නෑ. කරන්න පුළුවන් ලේසිම සහ කෙටිම මග තමා මේ ඉදිරිපත් කරලා තියෙන්නේ. 
මං ඔයාලට source code එක දෙන්නම් කරපු උදාහරණයේ. database එකත් එක්කම. කරලා බලලා coding වල නොතේරෙන දෙයක් තිබුනොත් comment එකක් දාන්න. ඒ නොතිබුනත් comment එකකින් මට කියන්න . 
අනිවා කියන්න ඕන, මතක් කරන්න ඕන දේවල් ටික මේවයි මේ code පිළිබඳව.
මෙන්න මේ මං උඩ කරලා තියෙන විදියට SqlConnection එකක් global variable එකක් විදියට හදනවනම්, අනිවාර්යෙන්ම හැම method එකක් අවසානයේම, හෝ හැම return statement එකකට කලින්ම ඒ Open කරපු  Connection එක close කරන්න අමතක කරන්න එපා. ඒ වගේම SqlDataReader එකත්. එහෙම නොවුනොත් errors ඒවි.

Source Code එක සහ මේ සඳහා යොදාගත් Database එක මෙතැනින් බා ගන්න.
SQL Server Management Studio හිදී Database එකේ නම ලෙස ලබාදුන්නේ KATTCAR ලෙසය.
ඔ‍බගේ පරිගණකයේ මෙය open කල පසු, DB_Connect යන class එකක් අවශ්‍ය දත්ත වෙනස් කරන්න.

No comments :

Post a Comment