仓酷云

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

[学习教程] ASP编程:进修ADO和ODBC会见数据库的一些思绪收拾...

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

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

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

x
专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。ado|odbc|会见|数据|数据库  比来一向在进修研讨用vc++会见数据库的成绩,利用过ADO,也利用过ODBC。就这两种毗连数据源的接口都有好几种体例,能够使用database,也能够使用dataset。使用这个word把我进修的思绪收拾一下。
  1、利用ADO毗连数据源
  一样平常来讲当创建基于对话框的使用程序时,都选择利用ADO对照便利(这纯属团体习气成绩)。
  1.间接在使用程序中创建与数据库的connection
  2.本人写一个ADOConnection类作为使用程序操纵数据库的接口,如许操纵的条理更分明,程序的分层头脑也表现较好。
  上面分离就这两种办法做个总结。
  1.间接在使用程序中创建与数据库的connection
  在使用程序中要利用ADO,则必要引进ADO的静态毗连库。其办法为:
在StdAfx.h中:
   #import"c:programfilescommonfilessystemadomsado15.dll"
   no_namespace
   rename("EOF","adoEOF")
  目标:发生msado15.tlh和msado15.tli两个头文件来界说ADO库。
   界说好ADO库后,应初始化COM库情况。其办法为:
  在C***APP::InitInstance中界说_ConnectionPtrm_pConnection;
   AfxOleInit();//利用AfxOleInit初始化OLE/COM库情况
  //创立ADO毗连
   m_pConnection.CreateInstance(_uuidof(Connection));
   //在ADO操纵中利用try...catch捕捉毛病
   try
   {      m_pConnection->Open("provider=SQLOLEDB;server=ZENGYH;database=postms;uid=sa;pwd=hongyi","","",adModeUnknown);
   }
   catch(_com_errore)
   {
       AfxMessageBox("毗连数据库失利!");
       returnFALSE;
   }
  而响应的开释数据库的毗连:
在C***APP::ExitInstance中:
m_pConnection->Close();
   ::OleUninitialize();
  至此,关于数据库的毗连与断开就可以顺遂完成,接上去将是对数据库中表的操纵,即对纪录集操纵。当操纵数据库的表时,需先声明数据集指针:_RecordsetPtrm_pRecordset;与创立ADO毗连相似,必要在所操纵的对话框类的OnInitDialog()中创立纪录集工具:
m_pRecordset.CreateInstance(_uuidof(Recordset));
   云云以后将可使用m_pRecordset来查询,修正,删除数据库等。
   翻开要操纵的表可以使用m_pRecordset的open函数m_pRecordset->Open("select*fromSTUDENTS",theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  纪录集的查询操纵:
  利用可使用以下的函数来完成纪录集的挪动Movefirst,movenext,moveprev,movelast。
  提取列属性:getcollect(“列名”),注重:此处的前往值范例为:_variant_t,这个范例类包括了很多与c++所撑持的范例的转换函数,较经常使用的是与cstring范例的转换(LPCSTR)_bstr_t(_variant_t范例变量)。
  纪录集的增添操纵:
  确保要操纵的纪录集翻开以后,起首挪用m_pRecordset->addnew(),addnew以后将主动天生一个供纪录集域值利用的新的空纪录,来寄存行将增添的数据信息,体系将主动实行sql的insert语句来拔出纪录。
  然后经由过程设置列属性:putcollect(“列名”,_variant_t&pvar)来设置纪录信息
  设置以后必定要挪用m_pRecordset->update来更新纪录集
  纪录集的修正操纵:
  修正操纵与增添操纵相似,独一分歧的地方在于不必先挪用addnew,而间接将纪录集指针挪动到必要修正的纪录处,实行putcollect操纵。
  以后再update。
  纪录集的删除操纵:
  当找到必要删除的纪录时,使用m_pRecordset->Delete(adAffectCurrent);能够删除以后的纪录。再update便可。
  固然,在每次必要对纪录集操纵之前应该翻开必要操纵的表的纪录集,操纵终了应封闭响应纪录集,如许能够包管只声明一个纪录集指针,每次只操纵一个纪录集,能够勤俭资本。
  别的,在修正和删除操纵中也大概必要查询满意前提的纪录,能够如许完成:
str.Format("select*fromSTUDENTSwhereStuID=%s",m_StuID);      m_pRecordset->Open(str.AllocSysString(),theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  2.本人写一个ADOConnection类作为使用程序操纵数据库的接口
  经由过程自界说的ADOConnection类封装与使用程序操纵数据库的接口(在这个类中应起首声明_connectionptr和_recordsetptr指针),这个类中要完成的功效包含:界说ADO库,初始化与ADO的毗连,开释毗连,初始化纪录集(办法1的初始化是在响应类的OnInitDialog()中完成),实行SQL语句
  界说ADO库,初始化与ADO的毗连,开释毗连与办法1分歧;
  初始化纪录集:
_RecordsetPtr&CAdoConnection::GetRecordset(_bstr_tmySql)
{
   try
   {
       if(m_pConnection==NULL)
       {
          OnInitAdoConneciton();
       }
       m_pRecordset.CreateInstance(_uuidof(Recordset));
       m_pRecordset->Open(mySql,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
   }
   catch(_com_error*e)
   {
       AfxMessageBox(e->ErrorMessage());
   }
   returnm_pRecordset;
}
  实行SQL语句次要利用connection来完成(分歧于办法1使用纪录集来完成)
boolCAdoConnection::ExecuteSql(_bstr_tmySql)
{m_pConnection->Execute(mySql,NULL,adCmdText);}
  至此,在使用程序中能够经由过程界说这个ADOConnection的实例来完成响应的操纵。
  查询操纵:
  起首界说ADOConnection,实行初始化ADO毗连;依据查询前提获得纪录集指针:
_bstr_tmySql="select*fromCOURSESwhereCouID="+m_CouID+"";
_RecordsetPtrmyRecordset=myConnection.GetRecordset(mySql);
  依据指针的前往情形举行处置。
  增加操纵:
  起首依据实践情形判别所要增加的纪录是不是存在(相似查询);若前往的指针是为空,则申明要增加的纪录不存在,则能够实行insert:
mySql="insertintoCOURSESvalues("+m_CouID+","+m_CouName+","+CouScore+","+CouTea+","+m_CouKind+")";
myConnection.ExecuteSql(mySql);
  修正操纵、删除操纵:
  与增加操纵相似,实行update和delete语句
  申明:每一个函数中的初始化ADOConnection和开释应绝对应。
   与办法1比拟,不必要单条操纵纪录集,纪录集指针也能够声明多个,实行sql语句更便利。
  纪录集的初始化能够通用到ADOConnection类中,而无需办法1中在分歧的类中初始化各自的纪录集。
  2、利用ODBC毗连数据源
  一样平常来讲创建基于文档视图的使用程序时,利用此办法毗连数据源。
  1.利用CDatabase类中的executesql实行SQL语句
  当创立基于单文档的使用程序时,若在第二步选择databaseviewwithfilesupport,则必要设置ODBC数据源(如student表),而且天生的使用程序的基类为recordview。那末天生的使用程序的Doc类中将主动天生所绑定的数据集类(cstudentsetm_studentset),View类中将主动天生(cstudentset*m_pset)。
  毗连数据库:
  对数据库的毗连要重载BOOLCStudentDoc::OnNewDocument():
  在该函数中到场如许的代码(m_database是我在文档类中界说的成员变量CDatabase):
if(m_pStudentSet==NULL)
   {
       m_pStudentSet=newCStudentSet(&m_database);
       CStringstrConnect=m_pStudentSet->GetDefaultConnect();
       m_database.Open(NULL,false,false,strConnect,false);
   }
  这里m_pStudentSet是在该文档类中从头界说的一个CStudentSet纪录集指针,至此能够创建使用程序与数据库的毗连。增加纪录操纵:
  在响应函数中声明CDatabasem_database
  在函数中界说CStudentSetmySet(&m_database);
  再翻开纪录集myset.open();
mySet.AddNew();
   CStringmySql;
   mySql="insertintoSTUDENTS(StuID,StuName)values("+m_pSet->m_StuID+","+m_pSet->m_StuName+")";
   m_database.ExecuteSQL(mySql);
   mySet.Update();
  删除纪录、修正纪录操纵:
  在函数中界说CStudentSetmySet(&m_database);
  再翻开纪录集myset.open();
mySet.Edit();
mysql=…….
m_database.ExecuteSQL(mySql);
mySet.Update();
  查询纪录操纵:
  仍旧能够选用纪录集指针的挪动,getcollect来完成。
  最初,不要健忘myset.close()。
  固然也能够利用CRecordset类来实行查询、删除、修正、增加操纵。基础办法跟后面所提到的分歧。这是我第一次在博客内里发文章,关于不成熟大概不准确的头脑还请人人提出,感谢。
对于中小型web应用来说,php有很强的竞争力,linux+apache+mysql+php(lamp)的组合几乎可以胜任绝大多数网站的解决方案,对于大型应用来讲,对于系统架构要求更高,需要有成熟的框架支持,jsp的struts是个不错的框架,国内介绍它的资料也非常多,应用逐渐广泛起来。asp就不用说了,
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-17 14:19:11 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
飘灵儿 该用户已被删除
板凳
 楼主| 发表于 2015-1-20 19:45:28 | 只看该作者
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
莫相离 该用户已被删除
地板
发表于 2015-1-29 17:39:18 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
爱飞 该用户已被删除
5#
发表于 2015-2-6 03:09:39 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
小魔女 该用户已被删除
6#
发表于 2015-2-15 08:10:07 | 只看该作者
作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。
海妖 该用户已被删除
7#
发表于 2015-3-4 11:23:48 | 只看该作者
作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。
兰色精灵 该用户已被删除
8#
发表于 2015-3-11 18:54:43 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
谁可相欹 该用户已被删除
9#
发表于 2015-3-19 08:32:16 | 只看该作者
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
小妖女 该用户已被删除
10#
发表于 2015-3-27 17:21:30 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-15 19:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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