仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2168|回复: 9
打印 上一主题 下一主题

[学习教程] MSSQL编程:关于存储历程的ADO挪用的一些心得(输入...

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:38:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功ado|存储历程|心得
在一个项目中,我必要用到存储历程来会见数据,为了供应一个对照分歧的接口以便挪用,我没有利用CreateParameter(),而是挪用CommandPtr的Refresh()函数先从数据库中查询参数.
_ConnectionPtrm_pConn;
m_pConn.CreateInstance(__uuidof(Connection));
m_pConn->Open("driver={SQLServer};server=127.0.0.1;DATABASE=pub;UID=sa;PWD=","","",0);

_CommandPtrm_pCommand;
m_pCommand.CreateInstance(__uuidof(Command));
_RecordsetPtrm_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));

m_pCommand->ActiveConnection=m_pConn;
m_pCommand->CommandText="SP_XX";//存储历程名
m_pCommand->PutCommandType(adCmdStoredProc);
m_pCommand->Parameters->Refresh();//从数据库查询参数信息


接上去就能够对每个参数赋值了:
longcnt=m_pCommand->Parameters->GetCount();//获得参数的个数
for(longk=1;k<cnt;k++)
{//因为ADO中以为前往值是第一个参数,因而这里用k=1滤失落第一个参数
m_pCommand->Parameters->GetItem(k)->Value=XXX;//按存储历程的参数按次给参数赋值
}


如今能够实行这个存储历程了
m_pRecordset=m_pCommand->Execute(0,0,adCmdStoredProc);
这个时分,假如接上去用
_variant_tret_val=m_pCommand->Parameters->GetItem((long)0)->Value;
那末将得不到值
而假如像上面如许挪用的话就能够失掉前往值了
m_pRecordset->Close();
_variant_toutput_para=m_pCommand->Parameters->GetItem((long)0)->Value;
MSADO.net给这一征象的复兴是:
Youcanthinkofastoredprocedureasafunctioninyourcode.Thefunctiondoesn’treturnavalueuntilithasexecutedallofitscode.Ifthestoredprocedurereturnsresultsandyouhaven’tfinishedprocessingtheseresults,thestoredprocedurehasn’treallyfinishedexecuting.Untilyou’veclosedtheDataReader,thereturnandoutputparametersofyourCommandwon’tcontainthevaluesreturnedbyyourstoredprocedure.
也就是说Execute()函数应当当作是直到m_pRecordset关失落今后才会准确前往.

关于输入参数的处置也和这一样,由于前往值自己就是当做输入参数来处置的.
经由过程这类办法,我们能够失掉一个存储历程的前往值和了局集,并且关于一切的存储历程都能够一样利用,不用为某个特定的存储历程往写代码,具有必定的通用性.
对于insert和delete,event中包含了插入/删除的记录的所有字段的值(太爽了。。)
飘灵儿 该用户已被删除
沙发
发表于 2015-1-17 14:10:14 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
柔情似水 该用户已被删除
板凳
发表于 2015-1-20 19:09:05 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
兰色精灵 该用户已被删除
地板
发表于 2015-1-29 15:31:16 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
再见西城 该用户已被删除
5#
发表于 2015-2-6 02:25:16 | 只看该作者
光写几个SQL实在叫无知。
海妖 该用户已被删除
6#
发表于 2015-2-15 01:50:35 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
因胸联盟 该用户已被删除
7#
发表于 2015-3-4 10:54:40 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
透明 该用户已被删除
8#
发表于 2015-3-11 18:31:52 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
谁可相欹 该用户已被删除
9#
发表于 2015-3-19 07:39:47 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
小妖女 该用户已被删除
10#
发表于 2015-3-27 14:25:36 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 13:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表