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等

举报

相关文章推荐

Oracle存储过程调用带参的存储过程

Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。 Oracle存储过程可以有无参数存储过程和带参数存储过程。  一、无参程序过程语法 1 create or replace...

通用带分页的sql2000存储过程和asp调用方法

通过百度搜索带颁的存储过程,虽然有很多,但都是问题很多,而且没有写明如何带条件的查询等,写个文章太不负责任了,经过长时间的研究,本人打造了自己的带分页存储过程,里面可以定义表名,列名,当然你也可以将表...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

mysql 带参数的存储过程

mysql 带参数的存储过程

执行带参数的存储过程

我的存储过程如下: create procedure spAddRenter @name varchar(20), @contact varchar(100), @contractID cha...

带输出参数的存储过程

先看下面的一小段存储过程: ALTER procedure [dbo].[StuInfo_GetStuInfo_CardID] @CardID varchar(20) , @Available v...

mysql带参存储过程

主要解决了数字位数不足0的填充问题,类似0001在数据库是1的问题,添加判断为了对接系统的星期字典。 DROP PROCEDURE IF EXISTS SP_INITCHIS_SECOND_STEP...

c#调用Mysql带参数的存储过程

这几天在学习mysql数据库的一些功能,今天在调用存储过程的时候 总是失败,最后发现居然是一个参数名称的问题,我将粘出代码事例及注意事项!1.首先创建一个带参数的存储过程存储过程名称=proc_boo...

[转载]pl/sql动态调用带参数的存储过程

以下内容来自:http://blog.itpub.net/658202/viewspace-1032467/ 说明:proc_one、proc_two、proc_three用来模拟三个proce...

Java调用Oracle、mysql带out参数的存储过程

create or replace package pkg_sxxtj as  type sxxtj_out_values is ref cursor;  procedure auditing_r...

c#调用带输出参数的存储过程

我会坚持经常就一些比较典型的问题发表博客,同学们可以长上来看看,有什么问题及时来反映。 第一篇,c#调用带输出参数的存储过程。 1.存储过程的意义 sql语句的执行大致包括,语法和语句分析,...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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