Execute SQL Queries In C#

Project Review 
     Dibutuhkan oleh user cabang di seluruh indonesia untuk mengupdate database melalui suatu aplikasi. Kenapa? karena tidak semua user cabang diberi akses ke database karena terkait dengan keamanan data. Ketika ada aplikasi yang berkenan dengan database yang akan/sedang dipakai belum up to date maka user cabang perlu mengupdate sql server baik itu view table, store procedure ataupun data. Nantinya admin HO(Head Office) akan mengirimkan informasi data dalam bentuk text (.txt) atau sql query (.sql) yang terbaru ke user cabang untuk mengupdate database nya melalui aplikasi ini. Apakah aplikasi ini mengakses database tanpa pasword ? tentu saja tidak., aplikasi ini mengakses database akan melalui text yang sudah disediakan dimana didalamnya terdapat nama database, user name dan encrypted password. jadi aplikasi inilah yang nantinya akan deencrypt password(membuka password) dan menjalankan sql nya. 


How To Use
     Sediakan file text yang diperlukan untuk mengakses database, berikut adalah contoh file text yang telah disediakan di local Disk C untuk mengakses database,
dts config

     Jika step ini selesai maka user bisa menjalankan aplikasi ini, browse file yang berisi data yang ingin dieksekusi, dan klik tombol Execute. Berikut contoh isi data yang akan dieksekusi dan UI nya .
 exec spsimple 'kamar101','tipedeluxe','1000000','0','2014-01-01'
new Done! image
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Text.RegularExpressions;
using EnCryptDecrypt;

namespace ImportData
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private const int CP_NOCLOSE_BUTTON = 0x200;
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams myCp = base.CreateParams;
                myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
                return myCp;
            }
        }

        private void buttonBrowse_Click(object sender, EventArgs e)
        {

            try
            {
                FileDialog dlg;
                //dlg.AddExtension = true;
                dlg = new OpenFileDialog();

                dlg.Filter = "Text File|*.txt";
                dlg.Title = "Select file name to process";

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    Browsetxt.Text = dlg.FileName;
                }
            }
            catch (Exception eg2) { MessageBox.Show(eg2.Message); }

        }
        private void buttonClose_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }


        public string browsedtxt { get; set; }
        public string filename { get; set; }

        private void buttonExecute_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Browsetxt.Text)) { MessageBox.Show("Please Browse File name", "Message"); }
            else
            {
                try
                {
                    browsedtxt = @"" + Browsetxt.Text + "";

                    var sections = browsedtxt.Split('\\');
                    filename = sections[sections.Length - 1];


                    SqlConnection con = new SqlConnection();
                    con.ConnectionString = "server=" + ServerNameTxt.Text + "; database=" + DatabaseTxt.Text + ";user id=" + LoginTxt.Text + "; password=" + PasswordTxt.Text + "";
                    con.Open();
                    ExecuteSql(con, browsedtxt);
                    MessageBox.Show("data has been successfully saved", "Message");
                }
                catch (Exception egx) { MessageBox.Show(egx.Message, "Message"); }

                #region updatetext

                FileInfo fi = new FileInfo("" + Browsetxt.Text + "");
                fi.CreationTime = fi.LastWriteTime;
                if (File.Exists(@"C:\Dtsms\LogData.txt") == false)
                {
                    StreamWriter streamWriter1 = File.CreateText(@"C:\Dtsms\LogData.txt");
                    streamWriter1.WriteLine("FileName | DateExec | LastModified ");
                    streamWriter1.Close();
                }
                else
                {
                    StreamReader streamReader;
                    streamReader = File.OpenText(@"C:\Dtsms\LogData.txt");
                    string contents = streamReader.ReadToEnd();
                    streamReader.Close();
                    StreamWriter streamWriter = File.CreateText(@"C:\Dtsms\LogData.txt");
                    streamWriter.WriteLine(contents + filename + " | " + DateTime.Now + " | " + fi.CreationTime);
                    streamWriter.Close();
                }
                #endregion
            }
        }

        public void ExecuteSql(SqlConnection connection, string sqlFile)
        {
            string sql = "";

            using (FileStream strm = File.OpenRead(sqlFile))
            {
                StreamReader reader = new StreamReader(strm);
                sql = reader.ReadToEnd();
            }


            Regex regex = new Regex("^GO", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            string[] lines = regex.Split(sql);

            SqlTransaction transaction = connection.BeginTransaction();
            using (SqlCommand cmd = connection.CreateCommand())
            {
                cmd.Connection = connection;
                cmd.Transaction = transaction;

                foreach (string line in lines)
                {
                    if (line.Length > 0)
                    {
                        cmd.CommandText = line;
                        cmd.CommandType = CommandType.Text;

                        try
                        {
                            cmd.ExecuteNonQuery();
                        }
                        catch (SqlException)
                        {
                            transaction.Rollback();
                            throw;
                        }
                    }
                }
            }

            transaction.Commit();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            if (File.Exists(@"C:\Dtsms\dtsms_config.txt") == true)
            {
                ///
                using (StreamReader reader = new StreamReader(@"C:\Dtsms\dtsms_config.txt"))
                {
                    while (reader != null)
                    {
                        //for ftp config text
                        reader.ReadLine();
                        reader.ReadLine();
                        reader.ReadLine();
                        reader.ReadLine();
                        reader.ReadLine();
                        //db
                        ServerNameTxt.Text += reader.ReadLine();
                        LoginTxt.Text += reader.ReadLine();
                        PasswordTxt.Text += reader.ReadLine();
                        DatabaseTxt.Text += reader.ReadLine();
                        break;
                    }
                    string cipherTextx = PasswordTxt.Text.Trim();
                    string decryptedText213 = CryptorEngine.Decrypt(cipherTextx, true);
                    PasswordTxt.Text = decryptedText213;
                    reader.Close();
                }
            }
            else
            {
                MessageBox.Show("no config file found ");

            }
        }
    }
}

Summary 
     Aplikasi ini membaca membaca file encrypt berupa username, password, database dst kemudian membaca isi dari file .txt/.sql yang telah dibrowse"attached" lalu mengeksekusi query tersebut dan menyimpan history execusi dalam sebuah text "log". Hubungi Contact jika membutuhkan informasi lebih lanjut. Wassalam..   

0 comments:

Post a Comment