本例通过前台提供的参数,指定要调用的存储过程,并返回Json结果。
后台的代码,负责根据参数“command”调用数据库中存储过程。
参数说明:
1.user:执行调用的用户名
2.password:执行调用的用户密码
(以上主要是为了防止未经授权的调用,可以用当前登录用户的用户名及密码)
3.command:调用参数格式为“要调用存储过程名称@参数1类型$参数1的值@参数2类型$参数2的值........”。需要注意的是参数类型必须是C#中的数据类型且要与存储过程中的数据类型相容(区分大小写)。参数个数由调用的存储过程决定。
4.callback:由jquery自动添加的参数,调用时不用管。
public ActionResult Index(string user,string password,string command,string callback)
{
string[] Params = command.Split('@');
try
{
string classFullName = "MenuSys.Models.dblinkDataContext";//namespace+className
string methodName = (string)Params[0];//methodName
Type type = Type.GetType(classFullName);//获取到类型
var u = conn.dbContext.sp_VerifyUser(user, password);
foreach (var p in u)
{
if (type != null)
{
MethodInfo mi = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public);//获取方法信息
if (mi != null)
{
List<object> o = new List<object>();
foreach (var pp in Params)//参数类型转换
{
string[] tp = pp.Split('$');
if (tp.Length == 2)
{
o.Add(Convert.ChangeType( tp[1],Type.GetType("System."+tp[0])));
}
}
object[] objArray = o.ToArray();
var obj = mi.Invoke(conn.dbContext,objArray);//调用方法
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
return new JsonpResult(0,0,"成功", js.Serialize(obj),callback);
}
return new JsonpResult(1, 1, "命令不存在!", "", callback);
}
}
return new JsonpResult(1, 1, "用户验证非法!", "", callback);
}
catch (Exception e)
{
return new JsonpResult(1, 1, e.Message, "", callback);
}
}
前台代码样例
用户ytx1991登录并获取用户基本信息。
sp_VerifyUser为存储过程名称,内容见下。不难看出该存储过程有两个参数,皆为字符串型。
ALTER proc [dbo].[sp_VerifyUser]
@username nvarchar(50),
@password nvarchar(50)
as
set nocount on
select * from [user] where username=@username and [password]=@password
前台代码
<script type=text/javascript >
localStorage.ServersURL="http://192.168.0.55/webservers?";//网络服务地址
function webservers(){//注意下面这个函数($.getJSON)第一个参数为取json的地址,第二个参数是一个函数(function(json))当调用完成会触发该函数。
$.getJSON(localStorage.ServersURL+"user=ytx1991&password=ytx1991&command=sp_VerifyUser@String$ytx1991@String$ytx1991&callback=?",
function(json){
if (json==null)//如果json对象为null说明无返回结果,这通常是网络连接的问题,要注意即便调用参数写错也是会返回Json数据的
{alert("连接服务器失败!");window.close();navigator.app.exitApp();}
//下面可以写对返回Json数据怎样处理
/*Json返回数据的基本格式:
json.ret:数字 表示是否调用成功,0为成功,1为失败
json.errcode:数字 错误代码,尽在json.ret=1时有效
json.msg:字符串 错误信息,若成功则为“成功”
json.data:返回的数据域
本例中返回的Json字符串为
本页url({"data":"[{\"userid\":6,\"name\":\"admin \",\"sex\":\"男 \",\"username\":\"ytx1991 \",\"password\":\"ytx1991 \",\"groupid\":null,\"usertypeid\":1}]","errcode":0,"msg":"成功","ret":0})
上面字符串会自动转换成json对象
如要得到用户ytx1991的userid可用json.data.userid
详细的使用方法请参考相关json知识*/
}
);
}
</script>