直接贴代码With MyComm
.ActiveConnection = Cn '数据连接
.CommandType = adCmdStoredProc '表明这是一个存储过程
.Prepared = True '要求将SQL命令先行编译
Select Case xTab '根据不同的TAB值,选择不同的存储过程和参数
Case 4
.CommandText = "SP_Ping_Dialtest" '存储过程名称
Set param = .CreateParameter("@GroupCol", adVarChar, adParamInput, 30, "network_type") ' cmbStats(3).Text) '申明一个参数
.Parameters.Append param '把参数添加到参数列表里
Set param = .CreateParameter("@IGOOD", adInteger, adParamInput, 8, Int(ReadIni("Define", "PING_TIME_LAPSE_GOOD", IniFile)))
.Parameters.Append param
Set param = .CreateParameter("@IStandard", adInteger, adParamInput, 8, Int(ReadIni("Define", "PING_TIME_LAPSE_STANDARD", IniFile)))
.Parameters.Append param
Set param = .CreateParameter("@Terminal_NO", adVarChar, adParamInput, 30, "20090101") ' Trim(txtPosNum.Text))
.Parameters.Append param
Set param = .CreateParameter("@Terminal_TYPE", adVarChar, adParamInput, 30, "1") 'Trim(cmbPosType.Text))
.Parameters.Append param
Set param = .CreateParameter("@NETWORK_TYPE", adVarChar, adParamInput, 8, "1") ' Trim(cmbNetType.Text))
.Parameters.Append param
Set param = .CreateParameter("@TASK_NAME", adVarChar, adParamInput, 50, "2GG") ' Trim(txtTaskName.Text))
.Parameters.Append param
Set param = .CreateParameter("@AREA_CENTER_ID", adInteger, adParamInput, 8, 1) ' Trim(cmbPosArea.ItemData(cmbPosArea.ListIndex)))
.Parameters.Append param
Set param = .CreateParameter("@STARTTIME", adVarChar, adParamInput, 30, Format(DTPBeginDay.Value & " " & DTPBeginTime.Value, "YYYY-MM-DD HH:MM:SS"))
.Parameters.Append param
Set param = .CreateParameter("@ENDTIME", adVarChar, adParamInput, 30, Format(DTPEndDay.Value & " " & DTPEndTime.Value, "YYYY-MM-DD HH:MM:SS"))
.Parameters.Append param
End Select
Set Rs = .Execute这样是传递参数进去,用command 对象获取记录集,第一个方法set rs=cn.exec("select * from AAA") 直接执行SQL命令,第二个方法
create procedure aa()
begin
select * from AAA;
endset rs=cn.exec("call aa()") 第三种方法。第三种方法把存储过程当SQL命令来执行,这样和第二种,第一种方法有什么区别??
.ActiveConnection = Cn '数据连接
.CommandType = adCmdStoredProc '表明这是一个存储过程
.Prepared = True '要求将SQL命令先行编译
Select Case xTab '根据不同的TAB值,选择不同的存储过程和参数
Case 4
.CommandText = "SP_Ping_Dialtest" '存储过程名称
Set param = .CreateParameter("@GroupCol", adVarChar, adParamInput, 30, "network_type") ' cmbStats(3).Text) '申明一个参数
.Parameters.Append param '把参数添加到参数列表里
Set param = .CreateParameter("@IGOOD", adInteger, adParamInput, 8, Int(ReadIni("Define", "PING_TIME_LAPSE_GOOD", IniFile)))
.Parameters.Append param
Set param = .CreateParameter("@IStandard", adInteger, adParamInput, 8, Int(ReadIni("Define", "PING_TIME_LAPSE_STANDARD", IniFile)))
.Parameters.Append param
Set param = .CreateParameter("@Terminal_NO", adVarChar, adParamInput, 30, "20090101") ' Trim(txtPosNum.Text))
.Parameters.Append param
Set param = .CreateParameter("@Terminal_TYPE", adVarChar, adParamInput, 30, "1") 'Trim(cmbPosType.Text))
.Parameters.Append param
Set param = .CreateParameter("@NETWORK_TYPE", adVarChar, adParamInput, 8, "1") ' Trim(cmbNetType.Text))
.Parameters.Append param
Set param = .CreateParameter("@TASK_NAME", adVarChar, adParamInput, 50, "2GG") ' Trim(txtTaskName.Text))
.Parameters.Append param
Set param = .CreateParameter("@AREA_CENTER_ID", adInteger, adParamInput, 8, 1) ' Trim(cmbPosArea.ItemData(cmbPosArea.ListIndex)))
.Parameters.Append param
Set param = .CreateParameter("@STARTTIME", adVarChar, adParamInput, 30, Format(DTPBeginDay.Value & " " & DTPBeginTime.Value, "YYYY-MM-DD HH:MM:SS"))
.Parameters.Append param
Set param = .CreateParameter("@ENDTIME", adVarChar, adParamInput, 30, Format(DTPEndDay.Value & " " & DTPEndTime.Value, "YYYY-MM-DD HH:MM:SS"))
.Parameters.Append param
End Select
Set Rs = .Execute这样是传递参数进去,用command 对象获取记录集,第一个方法set rs=cn.exec("select * from AAA") 直接执行SQL命令,第二个方法
create procedure aa()
begin
select * from AAA;
endset rs=cn.exec("call aa()") 第三种方法。第三种方法把存储过程当SQL命令来执行,这样和第二种,第一种方法有什么区别??
如果说区别可以详细看看为什么存储过程在执行复杂query的时候效率高。大概就是存储过程在server那里执行,而且是已经优化好的。
还有就是代码管理的问题。对于查询有调整,1的方法调整server上的存储过程就好了不需要对代码进行调整(参数不变),2就是要对代码进行调整。两种方法在最终如何给客户更新上就出现了区别对于简单的查询两种方法效率上区别不大。我不知道第三种方法也没用过
是关于自适应分辨率的 谢谢
我写的SELECT只是做个简单的例子,如果能够用到存储过程,一般都有比较复杂的业务做在里面了。。
1、
Conn.execute 语句1
conn.execute 语句2
conn.execute 语句32、
conn.execute "语句1;语句2;语句3"3、把语句1、语句2、语句3写到存储过程里面,直接执行存储过程。方法1是一条一条的执行速度应该是最慢的,方法2是批处理,数据库会预编译并进行优化,方法3是存储过程预编译和优化的过程已经提前完成,所以方法3是最快的,方法2其次,方法1最慢!
存储过程安全性高,可靠性好,参数是对象,防范SQL注入,同时程序中无需对参数中的特殊字符作额外处理...
conn.execute "EXEC 存储过程名 参数,参数,参数" 或者
command.execute "Exec …………"
这种方式,该注入的还是一样的注入
如果用Parameters对象来包裹参数,就像搂住那样的,即便不用存储过程也不会被SQL注入。
对的,我是指楼主第一种方法,command.execute
第三种方法执行存储过程和第一种方法执行存储过程,除开注入啥的,在效率上有什么区别吗??第三种方法写起来很方便。。在执行的时候,她是当SQL语句执行还是当存储过程执行?
http://topic.csdn.net/u/20091012/10/1a8c6307-47a7-46e3-876e-6eb76764e0b8.html?91901
合适的Commandtype和Prepared都会影响执行性能。用Connection的Execute方法需要指定Options值来达到同样的效率。
我不喜欢用CreateParameter,代码太多了,直接用.Parameters("@参数名称")方便多了
Command可以持续查询,Connection或Recordset不行。
一般区别都在服务器的开销上面,就像迅雷提出的一个面试题上一样:说JSP的大多数页面为什么都需要重新创建一个CONNECT,而不是共享一个CONNECT,这样做的好处是什么?
我个人理解就开销上面的区别,合理运用数据缓冲池,如果N多页面共享一个CONNECT则,在缓冲池中的连接信息将被无限加深,久而久之会出现一些脏数据,会影响整个连接速度.
那么如果多次的创建CONNECT,数据缓冲池中则会存在很多对象(直到此对象被销毁),那么连接速度一样会受到影响
你在查询分析器里去执行,不是用exec spname(1,2,3) 这样的调用吗??把这个当一个SQL命令来执行,当然可以嵌入到代码里面的。。我写的CALL SPNAME() 这样是MYSQL的语法。。
使用SQL语句,网络传送的是一个字符串,客户端也是得到满足要求的结果
用command 对象传送的东西要多吧?所以,你可以从传送的内容多少,在哪边执行来考虑,大脑中始终有服务器,网络和客户端三个概念大胡子不光能顶帖子吧?