6 กันยายน 2555

การเขียน Connection String แบบต่างๆ เพื่อเชื่อมต่อ SQLConnection (.Net)



ในการทำให้โปรแกรมของเรา สามารถติดต่อฐานข้อมูล 
อันนึงที่มักเป็นปัญหา บ่อยๆ คือ การเขียน 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 กันเรียบร้อยแล้ว
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 = "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();

สำหรับ VB.NET:
Imports System.Data.SqlClient

Dim mySQLConn As SqlConnection = New SqlConnection()
mySQLConn.ConnectionString = myconn
mySQLConn.Open()

จะเลือกใช้อย่างไหนก็เลือกดูเอานะครับ ว่า สภาพแวดล้อม ของเราเป็นแบบไหน

0 ความคิดเห็น:

แสดงความคิดเห็น