ในการทำให้โปรแกรมของเรา สามารถติดต่อฐานข้อมูล
อันนึงที่มักเป็นปัญหา บ่อยๆ คือ การเขียน Connection String ผิด
ทำไมผิด ?บ่อยครั้งที่ผมเขียนผิด ก็นั่งงง เป็นวัน ว่าทำไมคนอื่นทำแบบเดียวกันแล้ว connect ได้
แล้วเราทำไม่ได้ แล้วก็หลายครั้งนั้น ผมก็หาสาเหตุได้ว่า เพราะสภาพแวดล้อม ไม่เหมือนกัน
ไม่ได้เกี่ยวว่า บ้านใครอยู่ที่ไหน แต่เกี่ยวกับว่า โปรแกรมของเรา ติดต่อไปยัง DB Server ที่เป็นแบบไหน
ต่างหาก เช่น
WindowsXP + SQL Server บนเครื่องเดียวกัน
WindowsXP เครื่องหนึ่ง SQL Server อีกเครื่องหนึ่ง Windows 2000 Server
SQL Server มีมากกว่า 1 Instance หรือ ไม่ได้ใช้ชื่อ Default Stance
ต่างคนก็ต่างรูปแบบกันไป
บางครั้งมี IIS เพื่อทำ Web Server มาอีก เลยงงไปใหญ่
เรามาดูกันครับ ว่า แยกโดยง่ายๆแล้ว เป็นยังไง
ตัวอย่างจะทำการติดต่อ SQL Server ดังนี้
* server01 คือชื่อเครื่องที่เป็น DB Server
serverName\instanceName ในที่นี้ คือ server01\instance01
กรณีที่ เราใช้ instance ห้ามลืมเด็ดขาดที่ต้องระบุ instance name ด้วยทุกครั้ง
Initial Catalog คือ ชื่อ ฐานข้อมูล ให้ชื่อว่า StoreDB
User Id และ Password คือ login สำหรับ SQL Server เช่น sa [ไม่แนะนำให้ใช้]
แบบแรก เรียกว่า
Standard Security:
เขียนสองแบบ อันไหนก็ได้ครับ ให้ผลเหมือนกัน
กรณีที่เราได้สร้าง User ไว้ใน SQL Server ไว้แล้ว หรือ ไปขอเขาใช้ SQL Server คนอื่น แล้วเขาให้ User กับ Password สำหรับ ติดต่อฐานข้อมูลเท่านั้น
myconn = "Data Source=server01;Initial Catalog=StoreDB;User Id=sa;Password=sapassword;"
หรือ
myconn = "Server=server01;Database=StoreDB;User ID=sa;Password=sapassword;Trusted_Connection=False"
ส่วน Trusted_Connection=False เนี่ย ต้องระบุด้วยนะครับ เพราะเราจะขอใช้งาน User Id ของ SQL Server เลย
แบบสอง เรียกว่า
Trusted Connection:
อันนี้ พิเศษ สำหรับ Windows Server ครับ คือ SQL Server ที่ ติดตั้ง แบบ Mixed Mode คือ สามารถใช้ได้ทั้ง User Id บนระบบ Windows 2000 และ SQL Server login เพื่อติดต่อฐานข้อมูล หรือว่าโปรแกรมทำงานบนเครื่องเดียวกันกับ SQL Server หรือ เครื่องสองเครื่อง ได้ Trusted กันเรียบร้อยแล้ว
อันนี้ พิเศษ สำหรับ Windows Server ครับ คือ SQL Server ที่ ติดตั้ง แบบ Mixed Mode คือ สามารถใช้ได้ทั้ง User Id บนระบบ Windows 2000 และ SQL Server login เพื่อติดต่อฐานข้อมูล หรือว่าโปรแกรมทำงานบนเครื่องเดียวกันกับ SQL Server หรือ เครื่องสองเครื่อง ได้ Trusted กันเรียบร้อยแล้ว
myconn = "Data Source=server01;Initial Catalog=StoreDB;Integrated Security=SSPI;"
หรือ
myconn = "Server=server01;Database=StoreDB;Trusted_Connection=True;"
ทั้งสองแบบนี้ ก็ให้ผลแบบเดียวกัน แล้วแต่จะเลือกใช้
เห็นไหมครับว่า User Id กับ Password ไม่ต้องใส่อีกแล้ว เพราะการติดต่อจะมีการ Authen โดย Windows เองอยู่แล้ว
แบบสุดท้าย
Connect via an IP address:
ติดต่อ SQL Server อีกเครื่องหนึ่ง ชื่อเครื่องก็ไม่รู้ โปรโตคอล Netbios ก็ไม่ได้ใช้ รู้อย่างเดียวคือ IP address ของ SQL Server (SQL Server เป็น service ที่ใช้ TCP Port 1433 เป็น Default Port เปลี่ยนเป็นอันอื่น ถ้าไม่ได้ใช้ Port นี้)
หรือ
myconn = "Server=server01;Database=StoreDB;Trusted_Connection=True;"
ทั้งสองแบบนี้ ก็ให้ผลแบบเดียวกัน แล้วแต่จะเลือกใช้
เห็นไหมครับว่า User Id กับ Password ไม่ต้องใส่อีกแล้ว เพราะการติดต่อจะมีการ Authen โดย Windows เองอยู่แล้ว
แบบสุดท้าย
Connect via an IP address:
ติดต่อ SQL Server อีกเครื่องหนึ่ง ชื่อเครื่องก็ไม่รู้ โปรโตคอล Netbios ก็ไม่ได้ใช้ รู้อย่างเดียวคือ IP address ของ SQL Server (SQL Server เป็น service ที่ใช้ TCP Port 1433 เป็น Default Port เปลี่ยนเป็นอันอื่น ถ้าไม่ได้ใช้ Port นี้)
myconn = "Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=StoreDB;User ID=sa;Password=sapassword;"
* Network Library เพื่อเลือกค่าที่ต้องใช้ให้ถูกตัว ต้องรู้เพิ่มนิดหนึ่งครับว่า ต้องติดต่อแบบไหน แต่โดยทั่วไป เป็น Win32 Winsock TCP/IP อยู่แล้ว ถ้าไม่รู้ใส่ อันนี้ไปก่อน
แบบต่างๆ ของ Network library
Name Network library
dbnmpntw Win32 Named Pipes
dbmssocn Win32 Winsock TCP/IP
dbmsspxn Win32 SPX/IPX
dbmsvinn Win32 Banyan Vines
dbmsrpcn Win32 Multi-Protocol (Windows RPC)
หมดแล้วล่ะครับ ทั่วไปก็ใช้อยู่เท่านี้ ดูแล้วไม่ยากเลยใช่ไหม
ทีนี้มาดูว่าใช้ยังไง
สำหรับ C#:
using System.Data.SqlClient;
SqlConnection mySQLConn = new SqlConnection();
mySQLConn.ConnectionString = myconn;
mySQLConn.Open();
* Network Library เพื่อเลือกค่าที่ต้องใช้ให้ถูกตัว ต้องรู้เพิ่มนิดหนึ่งครับว่า ต้องติดต่อแบบไหน แต่โดยทั่วไป เป็น Win32 Winsock TCP/IP อยู่แล้ว ถ้าไม่รู้ใส่ อันนี้ไปก่อน
แบบต่างๆ ของ Network library
Name Network library
dbnmpntw Win32 Named Pipes
dbmssocn Win32 Winsock TCP/IP
dbmsspxn Win32 SPX/IPX
dbmsvinn Win32 Banyan Vines
dbmsrpcn Win32 Multi-Protocol (Windows RPC)
หมดแล้วล่ะครับ ทั่วไปก็ใช้อยู่เท่านี้ ดูแล้วไม่ยากเลยใช่ไหม
ทีนี้มาดูว่าใช้ยังไง
สำหรับ C#:
using System.Data.SqlClient;
SqlConnection mySQLConn = new SqlConnection();
mySQLConn.ConnectionString = myconn;
mySQLConn.Open();
สำหรับ VB.NET:
Imports System.Data.SqlClient
Dim mySQLConn As SqlConnection = New SqlConnection()
mySQLConn.ConnectionString = myconn
mySQLConn.Open()
จะเลือกใช้อย่างไหนก็เลือกดูเอานะครับ ว่า สภาพแวดล้อม ของเราเป็นแบบไหน
Imports System.Data.SqlClient
Dim mySQLConn As SqlConnection = New SqlConnection()
mySQLConn.ConnectionString = myconn
mySQLConn.Open()
จะเลือกใช้อย่างไหนก็เลือกดูเอานะครับ ว่า สภาพแวดล้อม ของเราเป็นแบบไหน
ที่มา :: http://greatfriends.biz/index2.asp
0 ความคิดเห็น:
แสดงความคิดเห็น