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

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