您的位置:首页 > 数据库

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

2012-07-25 18:38 239 查看
本例应用在WebService中,该WebService根据实际需要建立数据库连接,访问数据库,调用存储过程,得到结果。比如调用存储过程进行用户的验证登录。

存储过程详细见地址:/article/7962325.html

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;

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: