#眉標=Enterprise Library、WSSF、Software Factory #副標=設計模型套件系列(23) #大標=Web Service Software Factory應用實作 #作者=文/圖 王寧疆 ===<反灰>============= using System.Data.SqlClient; using System.Data; [WCF::ServiceBehavior(Name = "Service1", Namespace = "http://MyCompany.com/DBAccess", InstanceContextMode = WCF::InstanceContextMode.PerSession, ConcurrencyMode = WCF::ConcurrencyMode.Single )] public abstract class Service1Base : WCFDBService.ServiceContracts.IServiceContract1 { public virtual WCFDBService.MessageContracts.GetSicknessResponse GetSickness( WCFDBService.MessageContracts.GetSicknessRequest request) { string strConn = "Data Source=.;Initial Catalog=AdvASPNET;Integrated Security=true"; //資料庫連線資訊 string strSQL="Select * from Sickness where Sickname=@Sickname"; //查詢敘述 SqlConnection conn=new SqlConnection(strConn); //建立SqlConnection類別的物件 SqlCommand cmd=new SqlCommand(strSQL, conn); //建立SqlCommand類別的物件 cmd.CommandType=CommandType.Text; //設定SqlCommand類別的物件的CommandType屬性 cmd.Parameters.AddWithValue("@Sickname", request.SickName); //填入@Sickname參數的內容 WCFDBService.MessageContracts.GetSicknessResponse res = new WCFDBService.MessageContracts.GetSicknessResponse(); res.Sickness = new WCFDBService.DataContracts.Sickness(); //建立Sickness類別的物件 conn.Open(); //開啟資料庫連線 SqlDataReader dr = cmd.ExecuteReader(); //執行查詢,並將查詢得到的結果交給SqlDataReader類別的物件管理 dr.Read(); //讀取第一筆查詢的結果 res.Sickness.SickID = (int)dr["SickID"]; //將SickID欄位的內容值填入Sickness物件的SickID屬性 res.Sickness.SickName = dr["Sickname"].ToString();//將Sickname欄位的內容值填入Sickness物件的Sickname屬性 res.Sickness.Description = dr["Description"].ToString();//將Description欄位的內容值填入Sickness物件的Description屬性 dr.Close(); //關閉SqlDataReader類別的物件 dr.Dispose(); //丟棄SqlDataReader類別的物件 cmd.Dispose(); //關閉SqlCommand類別的物件 conn.Close(); //關閉資料庫連線 conn.Dispose(); //丟棄SqlConnection類別的物件 return res; //傳回GetSicknessResponse類別的物件 } } ================ ===<反灰>============= ================ ===<反灰>============= ================ ===<反灰>============= private void ExecuteButton_Click(object sender, EventArgs e) { DBServiceProxy.ServiceContract1Client p = new DBServiceProxy.ServiceContract1Client(); //建溝通物件 WCFDBService.Client.DBServiceProxy.Sickness res= p.GetSickness( SearchText.Text); //透過Proxy類別的物件呼叫Web服務提供的功能並取回呼叫的結果 string s = string.Format("ID={0},\r\nSickname={1},\r\nDescription={2}", res.SickID, res.Sickname, res.Description); //準備成輸出的格式 MessageBox.Show(s); } ================