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调用带参数存储过程的几种方式

1. 这也是最简单的方法,两个输入参数,无返回值: set connection = server.createobject("adodb.connection") connection.open s...
  • xmlife
  • xmlife
  • 2015年03月11日 17:03
  • 236

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

最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法。   1. 这也是最简单的方法,两个输入参数,无返回值:   set connection = server...
  • eldn__
  • eldn__
  • 2013年01月04日 20:21
  • 529

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

ASP调用带参数存储过程的几种方式 1 这也是最简单的方法,两个输入参数,无返回值: set connection = server.createobject("adodb.connection"...
  • dongzi502
  • dongzi502
  • 2014年01月15日 16:09
  • 327

函数参数三种传递方式的区别

问题提出:1、当一个类的对象作为实参数传递时,使用值传递和引用传递有什么区别? 比如: DateType ExampleFun(CString &strFileName,…)与 ...
  • My__long
  • My__long
  • 2017年01月07日 13:47
  • 1783

Oracle存储过程及举例(几种参数情况的存储过程)

Oracle存储过程及举例(几种参数情况的存储过程)
  • u013882957
  • u013882957
  • 2017年05月06日 22:22
  • 1262

c# 多线程 调用带参数函数

[csharp] view plaincopy   线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提...
  • SunCherryDream
  • SunCherryDream
  • 2015年07月25日 16:32
  • 1267

Java中参数传递方式(超详细)

无论是什么语言,要讨论参数传递方式,就得从内存模型说起,主要是我个人觉得从内存模型来说参数传递更为直观一些。闲言少叙,下面我们就通过内存模型的方式来讨论一下Java中的参数传递。 这里的内存模型涉及...
  • tb6013245
  • tb6013245
  • 2014年11月21日 16:50
  • 297

iOS - oc与js交互的几种方式(1)

oc调用js代码两种方式 1.通过webVIew调用 webView stringByEvaluatingJavaScriptFromString: 调用2.通过JSContext调用[cont...
  • WZios
  • WZios
  • 2016年06月15日 12:18
  • 1284

几种加密方式

几种加密方式 1 Base64加密方式(可逆) Base64中的可打印字符包括字母A-Z/a-z/数组0-9/ 加号’+’斜杠’/’ 这样共有62个字符 Base64 ios7之后加入系统库 ...
  • chentengkui
  • chentengkui
  • 2017年05月19日 23:38
  • 419

在Java中调用带参数的存储过程

JDBC调用存储过程: CallableStatement在Java里面调用存储过程,写法那是相当的固定:Class.forName(....Connection conn = DriverManag...
  • c_p_h
  • c_p_h
  • 2017年03月21日 16:07
  • 372
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP调用带参数存储过程的几种方式
举报原因:
原因补充:

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