\

Facebook


วันพฤหัสบดีที่ 12 กันยายน พ.ศ. 2556

[WinForm c#] เบาๆกับโปรแกรม test SQL Connection อย่างง่าย


วันนี้ว่างๆ กับวันศุกร์ยมๆ (บรรยากาศเงียบๆ) ทดลองทำโปรแกรม ทดสอบคอนเน็คชั่นด้วย sql server 2008 r2 เพื่อตรวจสอบ connection string ว่าถูกต้องไหมก่อนจะใช้ดึงข้อมูลจากเบสต่อไป แต่ว่าการเทสคอนเน็กชั่นนั้น เราจะเทสแค่ทดสอบเชื่อมต่อกับ Host เท่านั้นว่ามีการตอบกลับมาไหม ไม่ได้เชื่อมต่อ database หรือ table อันไหนเลย

ดังนั้น Connection string ที่ใช้ก็คือ อักษรด้านล่างนี้เลยครับ
Connect Timeout=10;Pooling=false;Integrated Security=sspi;server=(local)
โดยเปลี่ยนคำว่า (local) ที่ท้ายของประโยคเป็น Host Name อื่นๆได้เช่น Url หรือ ip address ได้ แต่ผมไม่ได้ทดลองกับโฮสอื่นๆนะครับ แต่กับ (local) เทสได้แน่นอน แต่ผ่าน URL ลองแล้วมีปัญหา >> เดี๋ยวศึกษาเพิ่มเติมต่อไปเรื่อยๆละกัน

ต่อไปก็เริ่มต้นการคอนเน็คจริงๆสักที เริ่มต้นจากตรวจสอบข้อมูลที่กรอกลงไปทั้งหมดว่าถูกต้องแล้วหรือยัง ฟิลล์ที่จำเป็นคือ
Hostname, Username, Password, Database, Table

โปรแกรมอันนี้ถ้า test connect สำเร็จเเล้ว จะตั้งค่า default ของยูสเซอร์และพาสเวิร์ดให้อัตโนมัติ ถ้าไม่ได้เซ็ตตามค่าที่กำหนดไว้ก็แก้ไขให้ตรงด้วยนะครับ และนอกจากนี้จะทำการค้นหาตารางทั้งหมดที่อยู่ใน database ลูกนั้น เพื่อนำไปใส่ให้กับ combobox ตารางข้างล่าง ซึ่งคิวรี่ข้างในคือ

string query = "SELECT * FROM [dbo].[" + textTable.Text + "]";

โดยต้องกำหนดค่า table ด้วยนะครับไม่งั้นกด connect ยังไงก็พัง แต่ถ้าคอนเน็กสำเร็จ จะแสดงข้อมูลบน column ทั้งหมดในตารางออกมาที่ช่องผลลัพนะครับ เอาเป็นว่าวันนี้มันยมแท้ ขี้เกียจพิมพ์ต่อละ เอาโค๊ดไปแปะแล้วจัด control ต่างๆให้ต้องกับรูป design เป็นอันเสร็จสิ้นแล้วครับ













Code สมบูรณ์ ข้างล่างนี้ครับ

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace ConsoleSqlConnect
{
    public partial class TestSQLConnection : Form
    {
        public TestSQLConnection()
        {
            InitializeComponent();
        }

        private void TestSQLConnection_Load(object sender, EventArgs e)
        {
            textHostName.Text = "(local)"; // set default for connection string [sql server]
            textdbName.Text = "Sample"; // set default 
            progressPanel1.Hide();
        }
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            //test Connection
            progressPanel1.Show();
            ComboBoxTable.Properties.Items.Clear();
            memoResult.EditValue = string.Empty;
            string con = "Connect Timeout=10;Pooling=false;Integrated Security=sspi;server="+textHostName.EditValue;
            memoEdit1.Text = con;
            using (SqlConnection sqlconn = new SqlConnection(con))
            {
                try
                {
                    sqlconn.Open();
                    memoResult.EditValue = "Test Connect Complete"+System.Environment.NewLine+"Choose Database";
                    string query = "USE Sample SELECT * FROM sys.Tables";
                    SqlCommand cmd = new SqlCommand(query, sqlconn);
                    cmd.CommandType = CommandType.Text;
                    SqlDataReader read = cmd.ExecuteReader();
                    if (read.HasRows)
                    {
                        int num = -1;
                        while (read.Read())
                        {
                            ComboBoxTable.Properties.Items.Add(new DevExpress.XtraEditors.Controls.ImageComboBoxItem(read[0].ToString(), read[0].ToString(), num));
                            num++;
                        }
                        ComboBoxTable.EditValue = ComboBoxTable.Properties.Items[0].Value.ToString();
                        textUserName.Text = "sa"; // set default 
                        textPassword.Text = "12345"; // set default 
                    }
                    sqlconn.Close();
                }
                catch (SqlException ex)
                {
                    memoResult.EditValue = "Test Connect Fail";
                }
            }
            progressPanel1.Hide();
        }

        private void simpleButton2_Click(object sender, EventArgs e)
        {
            //connect Database
            progressPanel1.Show();
            string strConnect = "Data Source=" + textHostName.Text + ";Initial Catalog=" + textdbName.Text + ";User ID=" + textUserName.Text + ";Password=" + textPassword.Text;
            memoEdit1.Text = strConnect;
            using (SqlConnection sqlconn = new SqlConnection(strConnect))
            {
                try
                {
                    sqlconn.Open();
                    memoResult.EditValue = "Connection to " + ComboBoxTable.EditValue + " Complete" + Environment.NewLine;
                    string query = "SELECT * FROM [dbo].[" + textTable.Text + "]";
                    SqlCommand cmd = new SqlCommand(query, sqlconn);
                    cmd.CommandType = CommandType.Text;
                    SqlDataReader read = cmd.ExecuteReader();
                    if (read.HasRows)
                    {
                        while (read.Read())
                        {
                            memoResult.EditValue += read[1].ToString()+Environment.NewLine;
                        }
                         
                    }
                    sqlconn.Close();
                }
                catch (SqlException ex)
                {
                    memoResult.EditValue = "Connection Fail"+ex;
                }
            }
            progressPanel1.Hide();
        }

        private string GenStandardConnectionString()
        {
            //syntax : Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
            return "Server = " + textHostName.Text + "; Database = " + textdbName.Text + "; User Id = "+textUserName.Text+"; Password = "+textPassword.Text+";";
        }

        private void ComboBoxTable_EditValueChanged(object sender, EventArgs e)
        {
            textTable.Text = ComboBoxTable.Text;
        }
    }
}
ปล. ใช้ DevExpress 12 เป็นตัว design หน้าจอนะครับ Control ต่างๆก็จะ reference ด้วย Dev Express ถ้าใครใช้ Control เจ้าอื่นก็จัดให้ตรงด้วยนะครับ
วิธีใช้งาน
1 กด test Connection ถ้าผ่านจะขึ้น "Test Connect Complete"
2 เลือก Database ที่จะ connect
3 กด Connect เพื่อเชื่อมต่อ database
4 ตรง result จะเเสดงข้อมูลจากตารางที่เชื่อมต่อสำเร็จ

อ่านความรู้อื่นๆ [2weektrain2014]

ไม่มีความคิดเห็น:

May be like this posts