วันนี้ว่างๆ กับวันศุกร์ยมๆ (บรรยากาศเงียบๆ) ทดลองทำโปรแกรม ทดสอบคอนเน็คชั่นด้วย 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]
ไม่มีความคิดเห็น:
แสดงความคิดเห็น