ASP调用带参数存储过程的几种方式

转载 2007年09月22日 09:04:00

 

//函数功能:客户端调用页面服务端方法

//示例:

//参数说明:

//isStaticMethod:是否是静态方法

//methodName:方法名称

//methodParamter:[可选]方法参数,必须是类型MethodParamter的实例或者null值(无参数)
//
callBackMethod:[可选]方法调用完后回调的客户端方法,客户端方法形式为 function callBackMethod(result){},result是个json对象,例如:function HandleCheckListResult(result){},参数值就是'HandleCheckListResult'
//
assemblyAndClassName:[可选]页面服务端所在组件和类名,形式为: 'AssemblyName|ClassFullName',例如: Weiky.dll|Weiky.AccessoriesForm'
function CallPageMethod(isStaticMethod,methodName,methodParamter,callBackMethod,assemblyAndClassName)
{
    
if(methodParamter && typeof(methodParamter.AddBoolParamter) != 'function')
    
{
        alert(“
参数methodParamter必须是类型MethodParamter的实例或者null值");
        
return;
    }

    
if(assemblyAndClassName == null)
    
{
        
if(typeof(AssemblyAndClassName) != 'undefined')
        
{
            assemblyAndClassName 
= AssemblyAndClassName;
        }

        
else
        
{
            alert(
"未提供页面服务端所在组件和类名");
            
return;
        }

    }

    
try
    
{
        MyWebService.CallPageMethod(assemblyAndClassName,isStaticMethod,methodName,methodParamter
?methodParamter.ToJson():null,methodParamter.ToType(),callBackMethod?callBackMethod:'', CallBackByWebService,HandleServiceMethodCallError);                                        
    }

    
catch(err)
    
{
        alert(
'将参数转换成JSON对象失败!');
    }

}


function CallBackByWebService(result)
{
    
var json = ConvertStringToJson(result);
    
if(json.Type != 0)
    
{
        ShowMessageBox2(json);
    }

    
else
    
{
        
var callBackMethod = json.HighlevelMessage;
        
if(callBackMethod != '')
        
{
            json.HighlevelMessage 
= '';
            json.Message 
= ReplaceString(json.Message,'',' ');
            eval(callBackMethod 
+ '(json)');
        }

    }

}


function MethodParamter()
{
    
var paramter = '';
    
var json = null;
    
    
this.AddStringParamter = function (value)
    
{
        AddParamter(
'string',ReplaceString(ReplaceString(value,'"','/"'),' ',''));
    }

    
    
this.AddGuidParamter = function (value)
    
{
        AddParamter(
'guid',value);
    }

    
    
this.AddDateParamter = function (value)
    
{
        AddParamter(
'date',value);
    }

    
    
this.AddIntParamter = function (value)
    
{
        AddParamter(
'int',value);
    }

    
    
this.AddDecimalParamter = function (value)
    
{
        AddParamter(
'decimal',value);
    }

    
    
this.AddBoolParamter = function (value)
    
{
        AddParamter(
'bool',value);
    }

    
    
function AddParamter(type,value)
    
{
        
if(paramter != '')
        
{
            paramter 
+= ','
        }

        paramter 
+= '{"Type":"' + type + '","Value":"' + value + '"}';
    }

    
    
this.AddJsonParamter = function (p)
    
{
        json 
= p;
    }

    
    
this.ToJson = function ()
    
{
        
if(json)
        
{
            
return json;
        }

        
if(paramter != '')
        
{
            
return eval('[' + paramter + ']');
        }

        
        
return null;
    }

    
    
this.ToType = function ()
    
{
        
return json?1:0;
    }

}

2.服务端webservice提供给ScriptManager控件,webservice代码如下:

 

[System.Web.Script.Services.ScriptService]
    [WebService(Namespace 
= "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(
false)]
    
public class MyWebService : System.Web.Services.WebService
    
{
[WebMethod(EnableSession 
= true)]
        
public string CallPageMethod(string assemblyAndClassName, bool isStaticMethod, string methodName, object paramtersPackage,int mpType,string callBackMethod)
        
{
            
try
            
{
                
object result = "";
                
bool succeed = false;
                
if (isStaticMethod)
                
{
                    Type type 
= GetActualType(assemblyAndClassName);
                    
if (type != null)
                    
{
                        succeed 
= true;
                        
if (mpType == 1)
                        
{
                            result 
= type.InvokeMember(methodName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static, nullnullnew object[] { paramtersPackage });
                        }

                        
else
                        
{
                            result 
= type.InvokeMember(methodName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static, nullnull, GetMethodArgs(paramtersPackage));
                        }

                    }

                }

                
else
                
{
                    
object o = WebBase.GetActualInstance(assemblyAndClassName, this.Server.MapPath("~/bin/"));
                    
if (o != null)
                    
{
                        succeed 
= true;
                        
if (mpType == 1)
                        
{
                            result 
= o.GetType().InvokeMember(methodName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance, null, o, new object[] { paramtersPackage });
                        }

                        
else
                        
{
                            result 
= o.GetType().InvokeMember(methodName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance, null, o, GetMethodArgs(paramtersPackage));
                        }

                    }

                }


                
return succeed ? 0 : 1, succeed ? (result == null ? "" : result.ToString()) : string.Format("获取组件信息失败,请检查组件参数{0}是否正确", assemblyAndClassName);
            }

            
catch (Exception err)
            
{
                
return err.Message;
            }

        }

private object[] GetMethodArgs(object paramtersPackage)
        
{
            
if (paramtersPackage == nullreturn null;

            
int i = 0;
            
object[] args = new object[((object[])paramtersPackage).Length];
            
foreach (System.Collections.Generic.Dictionary<stringobject> p in (object[])paramtersPackage)
            
{
                
switch (p["Type"].ToString().ToLower())
                
{
                    
case "string":
                        args[i
++= p["Value"].ToString().Replace(""," ");
                        
break;
                    
case "guid":
                        args[i
++= new Guid(p["Value"].ToString());
                        
break;
                    
case "date":
                        args[i
++= Convert.ToDateTime(p["Value"].ToString());
                        
break;
                    
case "int":
                        args[i
++= Convert.ToInt32(p["Value"].ToString());
                        
break;
                    
case "decimal":
                        args[i
++= Convert.ToDecimal(p["Value"].ToString());
                        
break;
                    
case "bool":
                        args[i
++= Convert.ToBoolean(p["Value"].ToString());
                        
break;
                    
default:
                        args[i
++= p["Value"];
                        
break;
                }

            }

            
return args;
        }

 
private WebBaseForm GetActualInstanceForm(string assemblyAndClassName)
        
{
            
object o = WebBase.GetActualInstance(assemblyAndClassName,this.Server.MapPath("~/bin/"));
            
if (o != null)
            
{
                
if (o is WebBaseForm)
                
{
                    
return (WebBaseForm)o;
                }

            }


            
return null;
        }


        
private Type GetActualType(string assemblyAndClassName)
        
{
            
if (assemblyAndClassName != "")
            
{
                
string[] ac = assemblyAndClassName.Replace("!""/").Split('|');
                
if (ac.Length == 2)
                
{
                    ac[
0= WebBase.AddPath(ac[0],this.Server.MapPath("~/bin/"));
                    
return System.Reflection.Assembly.LoadFrom(ac[0]).GetType(ac[1]);
                }

            }


            
return null;
        }

}

 3.客户端调用示例:

 

function DataDDL_Change(ddl)
        
{
            
var mp = new MethodParamter();
            mp.AddIntParamter(DropDownList_GetValue(ddl));
            mp.AddIntParamter(EntityObjectId);
            CallPageMethod(
true,'GetEntityData',mp,'LoadDataTree');
        }

        
        
function LoadDataTree(json)
        
{
alert(json.Message);
}

总结:通过这样的封装,客户端调用服务端静态/实例方法非常方便,并且不会引起任何页面的postback。上面所用客户端技术有ajax,json等

相关文章推荐

ASP.NET中调用存储过程带(输入输出)参数和返回值例子

有些初学者在调用存储过程时容易出现一些错误,下面我就不同的返回参数而言举个用户登录常用的例子做一些简单的讨论:(由简单--->>深入) 创建数据库:(Student) 创建用户表:(Users) ...

ASP.NET中调用存储过程带(输入/输出)参数和返回值的一些常用的例子

                                                                                     ...

hibernate里使用jdbc方式调用oracle带游标返回参数的简单分页存储过程

最近要学一个hibernate调用游标,找来找去也没找到如何调用,最后看了许多文章,用jdbc方式来调用也是可以的,但是效率上就不行了,因为每次都要连接数据库,从而放弃了hibernate的对象持久化...

asp.net调用输出参数存储过程

  • 2011年06月29日 11:38
  • 3KB
  • 下载

ASP.net:调用存储过程 -- 代码取不到输出(Output)参数值 - 因ExecuteReader不当使用

存储过程的输出参数的使用,相信大家早晚多少都(会)用到过。不知用到过朋友,有没有遇到在程序中“咋就”取不到想要的输出值的情况;始终是null值。昨天本人就遇到了,也可能是用的不多,这种情况也是第一次遇...

asp.net 调用带有输出参数的存储过程

前台jqurey

Asp调用存储过程,command.CreateParameter 参数值的类型说明

Asp调用各种存储过程,包括带参数,无参数,输入输出参数,带返回值等。 1,调用没有参数的存储过程 set conn=server.CreateObject(“adodb.connecti...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP调用带参数存储过程的几种方式
举报原因:
原因补充:

(最多只允许输入30个字)