本例應用在WebService中,該WebService根據實際需要建立資料庫連接,訪問資料庫,調用預存程序,得到結果。比如調用預存程序進行使用者的驗證登入。
預存程序詳細見地址:http://blog.csdn.net/whuarui2010/article/details/7768061
WebService的Web方法如下:
[WebMethod] public string JiaoJingTongWebService(string functionName,string xmlString) { string s = "2"; try { Functions ff = new Functions(); s = ff.DataProcessing(functionName, xmlString); } catch(Exception e) { } return functionName+"_"+s; }
說明:
JiaoJingTongWebService是函數名稱,調用該webservice時必須傳遞兩個參數,一個是functionname,用來指示操作那個預存程序,xmlstring是傳遞的xml字串格式的資料。該函數傳回值string類型,0-2的取值分別表示操作成功,失敗,網路問題。
DataProcessing方法用來處理該xml字串資料,為預存程序參數做準備。
Function類如下:
public class Functions { Dictionary<string, string> dictionary ; GetDataFromDB getDatas ; string outputparameter; //用戶端傳遞的資料整理 public string DataProcessing(string functionName,string xmlString){ dictionary = new Dictionary<string, string>(); getDatas = new GetDataFromDB(); dictionary = XMLStringParsing(xmlString); //調用預存程序方法 outputparameter= getDatas.GetServiceDatas(functionName, dictionary); return outputparameter; } //XML字串解析 Dictionary<string,string> XMLStringParsing(string xml) { Dictionary<string, string> dic = new Dictionary<string, string>(); XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); XmlNodeList xxList = doc.GetElementsByTagName("Element"); foreach(XmlNode xnode in xxList) { XmlNodeList childList = xnode.ChildNodes; foreach(XmlNode node in childList){ string nodeName = node.Name; switch(nodeName) { //使用者基本資料 case "ID": dic.Add("@in_id", node.InnerText); break; case "UserName": dic.Add("@in_username", node.InnerText); break; case "Password": dic.Add("@in_password", node.InnerText); break; case "OldPassword": dic.Add("@in_oldpassword", node.InnerText); break; } } } return dic; }
說明:
dictionary用來準備預存程序的參數;
XMLStringParsing函數用來解析所有的xml字串,解析的有用的東西添加到dictionary中。
GetServiceDatas方法用來建立資料連線並調用預存程序。
GetServiceDatas方法如下:
public string GetServiceDatas(string functionName,Dictionary<string,string> dic){ //使用者登入資料庫連接、Windows登入串連 //string DBConnStr = "uid=MARTIN; password=; Database=JiaoJingTong;Server=MARTIN;Connect Timeout=30"; string DBConnStr = "Database=JiaoJingTong;Server=MARTIN;Integrated Security=True; Connect Timeout=30"; SqlConnection myConnection = new SqlConnection(DBConnStr); if(myConnection.State != ConnectionState.Open) { myConnection.Open(); } //調用資料庫的預存程序 SqlCommand myCommand = new SqlCommand(functionName, myConnection); myCommand.CommandType = CommandType.StoredProcedure; //添加輸入查詢參數、賦予值 foreach(var item in dic) { string k = item.Key.ToString(); string v = item.Value.ToString(); myCommand.Parameters.Add(k, SqlDbType.VarChar); myCommand.Parameters[k].Value = v; } //添加輸出參數 myCommand.Parameters.Add("@out_parameter", SqlDbType.Int); myCommand.Parameters["@out_parameter"].Direction = ParameterDirection.Output; SqlDataAdapter DataAdapter = new SqlDataAdapter(); DataSet MyDataSet = new DataSet(); //myCommand.ExecuteNonQuery(); DataAdapter.SelectCommand = myCommand; if(MyDataSet != null) { DataAdapter.Fill(MyDataSet, "table"); } //得到預存程序輸出參數 string out_parameter = myCommand.Parameters["@out_parameter"].Value.ToString(); if(myConnection.State == ConnectionState.Open) { myConnection.Close(); } return out_parameter; }