C#开发之调用数据库存储过程

来源:互联网 发布:淘宝促销模块代码 编辑:程序博客网 时间:2024/05/02 23:10

本例应用在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;        }  
	
				
		
原创粉丝点击