精华内容
下载资源
问答
  • 结合实例详细介绍如何实现在JSP 技术中对MySQL 数据库访问, 能够实现对数据库的 基本操作。主要包括JSP 开发环境搭建,下载并安装MySQL,在MyEclipse 环境下通过JSP 连接MySQL 数据库
  • 主要的数据库访问技术

    千次阅读 2018-05-31 18:54:44
    主要的数据库访问技术:ODBC(Open Database Connectivity开放数据库互联)作为一个访问不同数据库的公共接口

    主要的数据库访问技术:

          1.ODBC(Open Database Connectivity[开放数据库互联])为访问不同的数据库提供了一个公共的接口。ODBC使用SQL作为访问数据库的标准。这一接口提供了最大限度的互操作性,一个应用可以通过相同的代码访问不同的数据库。

          2.JDBC(Java Data Base Connectivity[java数据库连接])用于java程序链接数据库的标准方法,一种可以执行SQL的java API,可以为    多种关系型数据库提供统一访问,由java编写的类和接口实现。

          3.ADO.NET是微软在.net框架下开发设计的一组用于和数据库交互的面向对象的类库。ADO.NET提供了对关系型数据库、XML和应用程序数据的访问,允许和不同类型的数据源以及数据库进行交互。

          4.PDO(PHP Data Object)为PHP访问数据库定义了一个轻量级的、一致性的接口,他提供了一个数据访问的抽象层,无论使用什么数据库都可以通过一致的函数执行查询和获取数据。

    展开全文
  • ADO数据库访问技术

    千次阅读 2019-04-08 21:14:50
    一、ADO(active data object,活动数据对象)实际上是一种基于COM(组件对象模型)的自动化接口技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创建...

    https://blog.csdn.net/lishan9133/article/details/7055595

    一、ADO(active data object,活动数据对象)实际上是一种基于COM(组件对象模型)的自动化接口技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序。

        万事开头难,任何一种新技术对于初学者来说最重要的还是"入门",掌握其要点。让我们来看看ADO数据库开发的基本流程吧!它的基本步骤如下:

    (1)初始化COM库,引入ADO库定义文件

    (2)用Connection对象连接数据库

    (3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。

    (4)使用完毕后关闭连接释放对象。

    二、ADO的三个核心对象

       Connection对象:它表示到数据库的连接,管理应用程序和数据库之间的通信。Command和Recordset对象都有一个ActiveConnection属性,该属性用来引用Connection对象。

       Command对象:被用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询。

       Recordset对象:被用来获取数据。Recordset对象存放查询的结果,这些结果由数据的行(成为记录)和列(称为字段)组成。每一列都存放在Recordset的Fields集合中的一个Fields对象中。

          

    三、我们仍采用原库结构,数据库名Demo.mdb,库内表名DemoTable,表内字段名为Name(姓名)和Age(年龄)的两个字段,来构造示例程序操作所需的Access数据库。

            首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它既可。可以直接在Stdafx.h文件中加入下面语句来实现:

    #import "c:\program files\common files\system\ado\msado15.dll" rename ("EOF", "adoEOF")  (在一行上啊)      

    using namespace ADODB; 

    其中路径名可以根据自己系统安装的ADO支持文件的路径来自行设定。当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵数LoadTypeLib()。#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。rename ("EOF", "adoEOF")说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。
        其次,在程序初始过程中需要初始化组件,一般可以用CoInitialize(NULL);来实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();来实现关闭初始化的COM。在MFC中还可以采用另一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示: AfxOleInit();
        接着,就可以直接使用ADO的操作了。我们经常使用的只是前面用#import语句引用类型库时,生成的包装类.tlh中声明的智能指针中的三个,它们分别是_ConnectionPtr、_RecordsetPtr和_CommandPtr。下面分别对它们的使用方法进行介绍:

    1、_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行SQL命令语句(用法和_CommandPtr中的Execute方法类似)。
    ——打开一个库连接。先创建一个实例指针,再用Open打开一个库连接,它将返回一个IUnknown的自动化接口指针。代码如下所示:

    _ConnectionPtr	m_pConnection;
    // 初始化COM,创建ADO连接等操作
    AfxOleInit();
    m_pConnection.CreateInstance(__uuidof(Connection));
    
    // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
    // 因为它有时会经常出现一些意想不到的错误。jingzhou xu
    try                 
    {	
    	// 打开本地Access库Demo.mdb
    	m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown);
    
            //通过JET数据库引擎对ACCESS2000数据库的连接:
    }
    catch(_com_error e)
    {
    	AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
    	return FALSE;
    }      
     

    在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的,下面是该方法的原型:

    HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options );

    上述函数中参数ConnectionString为连接字串;参数UserID是用户名;参数Password是登陆密码;参数Options是连接选项,用于指定Connection对象对数据的更新许可权,一般情况下Options可以是如下几个常量:

    adModeUnknown:缺省。当前的许可权未设置

    adModeRead:只读

    adModeWrite:只写

    adModeReadWrite:可以读写

    adModeShareDenyRead:阻止其它Connection对象以读权限打开连接

    adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接

    adModeShareExclusive:阻止其它Connection对象以读写权限打开连接

    adModeShareDenyNone:阻止其它Connection对象以任何权限打开连接

    Connection对象除Open()方法外还有许多方法,我们先介绍Connection对象中两个有用的属性ConnectionTimeOut与State。ConnectionTimeOut用来设置连接的超时时间,需要在Open之前调用,例如:

    m_pConnection->ConnectionTimeout = 5;///设置超时时间为5秒 m_pConnection->Open("Data Source=adotest;","","",adModeUnknown);

    State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如

     

    ——关闭一个库连接。如果连接状态有效,则用Close方法关闭它并赋于它空值。代码如下所示:

    if(m_pConnection->State)
            m_pConnection->Close();
    m_pConnection= NULL;      
     

     

    2、_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作。
    ——打开数据表。打开库内表名为DemoTable的数据表,代码如下:

    _RecordsetPtr	m_pRecordset;
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    
    // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
    // 因为它有时会经常出现一些意想不到的错误。jingzhou xu
    try
    {
    	m_pRecordset->Open("SELECT * FROM DemoTable",                // 查询DemoTable表中所有字段
    						theApp.m_pConnection.GetInterfacePtr(),	 // 获取库接库的IDispatch指针
    						adOpenDynamic,
    						adLockOptimistic,
    						adCmdText);
    }
    catch(_com_error *e)
    {
    	AfxMessageBox(e->ErrorMessage());
    }      
     

    Open()方法的原型如下:

    HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )

    上述函数中参数Source是数据查询字符串;参数ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个_variant_t对象);参数CursorType光标类型,它可以是以下值之一;请看这个枚举结构:

    enum CursorTypeEnum { adOpenUnspecified = -1,///不作特别指定 adOpenForwardOnly = 0,///前滚静态光标。这种光标只能向前浏览记录集,比如用MoveNext向前滚动,这种方式可以提高浏览速度。但诸如BookMark, RecordCount,AbsolutePosition,AbsolutePage都不能使用 adOpenKeyset = 1,///采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的操作对你是可见的。 adOpenDynamic = 2,///动态光标。所有数据库的操作都会立即在各用户记录集上反应出来。 adOpenStatic = 3///静态光标。它为你的记录集产生一个静态备份,但其它用户的新增、删除、更新操作对你的记录集来说是不可见的。 };

    参数LockType表示数据库的锁定类型,它可以是以下值之一,请看如下枚举结构:

    enum LockTypeEnum { adLockUnspecified = -1,///未指定 adLockReadOnly = 1,///只读记录集 adLockPessimistic = 2,悲观锁定方式。数据在更新时锁定其它所有动作,这是最安全的锁定机制 adLockOptimistic = 3,乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之前仍然可以做数据的更新、插入、删除等动作 adLockBatchOptimistic = 4,乐观分批更新。编辑时记录不会锁定,更改、插入及删除是在批处理模式下完成。 };

    参数Options的含义请参考本文中对Connection对象的Execute()方法的介绍。

    ——读取表内数据。将表内数据全部读出并显示在列表框内,m_AccessList为列表框的成员变量名。如果没有遇到表结束标志adoEOF,则用GetCollect(字段名)或m_pRecordset->Fields->GetItem(字段名)->Value方法,来获取当前记录指针所指的字段值,然后再用MoveNext()方法移动到下一条记录位置。代码如下所示:

    _variant_t var;
    CString strName,strAge;
    	try
    	{
    		if(!m_pRecordset->BOF)
    			m_pRecordset->MoveFirst();
    		else
    		{
    			AfxMessageBox("表内数据为空");
    			return;
    		}
    
    		// 读入库中各字段并加入列表框中
    		while(!m_pRecordset->adoEOF)
    		{
    			var = m_pRecordset->GetCollect("Name");
    			if(var.vt != VT_NULL)
    				strName = (LPCSTR)_bstr_t(var);
    			var = m_pRecordset->GetCollect("Age");
    			if(var.vt != VT_NULL)
    				strAge = (LPCSTR)_bstr_t(var);
    
    			m_AccessList.AddString( strName + " --> "+strAge );
    
    			m_pRecordset->MoveNext();
    		}
    
    		// 默认列表指向第一项,同时移动记录指针并显示
    		m_AccessList.SetCurSel(0);
    	}
    	catch(_com_error *e)
    	{
    		AfxMessageBox(e->ErrorMessage());
    	}     

    ——插入记录。可以先用AddNew()方法新增一个空记录,再用PutCollect(字段名,值)输入每个字段的值,最后再Update()更新到库中数据既可。其中变量m_Name和m_Age分别为姓名及年龄编辑框的成员变量名。代码所下所示:

    try
    	{
    		// 写入各字段值
    		m_pRecordset->AddNew();
    		m_pRecordset->PutCollect("Name", _variant_t(m_Name));
    		m_pRecordset->PutCollect("Age", atol(m_Age));
    		m_pRecordset->Update();
    
    		AfxMessageBox("插入成功!");
    	}
    	catch(_com_error *e)
    	{
    		AfxMessageBox(e->ErrorMessage());
    	}      

    ——移动记录指针。移动记录指针可以通过MoveFirst()方法移动到第一条记录、MoveLast()方法移动到最后一条记录、MovePrevious()方法移动到当前记录的前一条记录、MoveNext()方法移动到当前记录的下一条记录。但我们有时经常需要随意移动记录指针到任意记录位置时,可以使用Move(记录号)方法来实现,注意: Move()方法是相对于当前记录来移动指针位置的,正值向后移动、负值向前移动,如:Move(3),当前记录是3时,它将从记录3开始往后再移动3条记录位置。代码如下所示:

    	try
    	{
    		int curSel = m_AccessList.GetCurSel();	
    		// 先将指针移向第一条记录,然后就可以相对第一条记录来随意移动记录指针
    		m_pRecordset->MoveFirst();
    		m_pRecordset->Move(long(curSel));
    		
    	}
    	catch(_com_error *e)
    	{
    		AfxMessageBox(e->ErrorMessage());
    	}      

    ——修改记录中字段值。可以将记录指针移动到要修改记录的位置处,直接用PutCollect(字段名,值)将新值写入并Update()更新数据库既可。可以用上面方法移动记录指针,修改字段值代码如下所示:

    	try
    	{
    		// 假设对第二条记录进行修改
    		m_pRecordset->MoveFirst();
    		m_pRecordset->Move(1);        // 从0开始
    		m_pRecordset->PutCollect("Name", _variant_t(m_Name));
    		m_pRecordset->PutCollect("Age", atol(m_Age));
    		m_pRecordset->Update();
    	}
    	catch(_com_error *e)
    	{
    		AfxMessageBox(e->ErrorMessage());
    	}      

    ——删除记录。删除记录和上面修改记录的操作类似,先将记录指针移动到要修改记录的位置,直接用Delete()方法删除它并用Update()来更新数据库既可。代码如下所示:

    	try
    	{
    		// 假设删除第二条记录
    		m_pRecordset->MoveFirst();
    		m_pRecordset->Move(1);        // 从0开始
    		m_pRecordset->Delete(adAffectCurrent);  // 参数adAffectCurrent为删除当前记录
    		m_pRecordset->Update();
    	}
    	catch(_com_error *e)
    	{
    		AfxMessageBox(e->ErrorMessage());
    	}      

    ——关闭记录集。直接用Close方法关闭记录集并赋于其空值。代码如下所示:

    	m_pRecordset->Close();
    	m_pRecordset = NULL;      

    3、CommandPtr智能指针,可以使用_ConnectionPtr或_RecordsetPtr来执行任务,定义输出参数,执行存储过程或SQL语句。

    (补充::ADO Command 对象用于执行面向数据库的一次简单查询。此查询可执行诸如创建、添加、取回、删除或更新记录等动作。

    如果该查询用于取回数据,此数据将以一个 RecordSet 对象返回。这意味着被取回的数据能够被 RecordSet 对象的属性、集合、方法或事件进行操作。

    Command 对象的主要特性是有能力使用存储查询和带有参数的存储过程。)

    ——执行SQL语句。先创建一个_CommandPtr实例指针,再将库连接和SQL语句做为参数,执行Execute()方法既可。代码如下所示:

    _CommandPtr		m_pCommand;
    m_pCommand.CreateInstance(__uuidof(Command));
    m_pCommand->ActiveConnection = m_pConnection;  // 将库连接赋于它
    m_pCommand->CommandText = "SELECT * FROM DemoTable";  // SQL语句
    m_pRecordset = m_pCommand->Execute(NULL, NULL,adCmdText); // 执行SQL语句,返回记录集      

    ——执行存储过程。执行存储过程的操作和上面执行SQL语句类似,不同点仅是CommandText参数中不再是SQL语句,而是存储过程的名字,如Demo。另一个不同点就是在Execute()中参数由adCmdText(执行SQL语句),改为adCmdStoredProc来执行存储过程。如果存储过程中存在输入、输出参数的话,需要使用到另一个智能指针_ParameterPtr来逐次设置要输入、输出的参数信息,并将其赋于_CommandPtr中Parameters参数来传递信息,有兴趣的读者可以自行查找相关书籍或MSDN。执行存储过程的代码如下所示:

    _CommandPtr		m_pCommand;
    m_pCommand.CreateInstance(__uuidof(Command));
      m_pCommand->ActiveConnection = m_pConnection;  // 将库连接赋于它
    m_pCommand->CommandText = "Demo";  
      m_pCommand->Execute(NULL,NULL, adCmdStoredProc);      

     

    四、SQL命令的执行可以采用多种形式,下面我们一一进行阐述。

    1、我们还可以利用Connection对象的Execute方法执行SQL命令

    Execute()方法的原型如下所示:

    _RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options )

    其中CommandText是命令字串,通常是SQL命令。参数RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options可以取如下值之一:adCmdText表明CommandText是文本命令;adCmdTable表明CommandText是一个表名;adCmdProc表明CommandText是一个存储过程; adCmdUnknown表明CommandText内容未知。Execute()函数执行完后返回一个指向记录集的指针
    下面我们给出具体代码并作说明:

    _variant_t RecordsAffected; ///执行SQL命令:CREATE TABLE创建表格users,users包含四个字段:整形ID,字符串username,整形old,日期型birthday m_pConnection->Execute("CREATE TABLE users(ID INTEGER,username TEXT,old INTEGER,birthday DATETIME)",&RecordsAffected,adCmdText); ///往表格里面添加记录 m_pConnection->Execute("INSERT INTO users(ID,username,old,birthday) VALUES (1, 'Washington',25,'1970/1/1')",&RecordsAffected,adCmdText); ///将所有记录old字段的值加一 m_pConnection->Execute("UPDATE users SET old = old+1",&RecordsAffected,adCmdText); ///执行SQL统计命令得到包含记录条数的记录集 m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM users",&RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset->GetCollect(vIndex);///取得第一个字段的值放入vCount变量 m_pRecordset->Close();///关闭记录集 CString message; message.Format("共有%d条记录",vCount.lVal); AfxMessageBox(message);///显示当前记录条数

     2、利用Command对象来执行SQL命令

    上面已经叙述过

    3、直接用Recordset对象进行查询取得记录集

    上面也叙述过了

    展开全文
  • 数据库访问技术的总结 一

    千次阅读 2018-06-12 19:18:33
    本文打算对数据库访问技术,做一个完整的梳理,已被后来需要时查阅。 一、嵌入式SQL的处理过程 将书写的SQL语句嵌入到主语言中,主语言一般如c、c++、java等。对于这种嵌入式语言(ESQL),RDBMS的处理方式是...

    以下几篇对数据库的访问技术,做一个完整的梳理,已备后来需要时查阅。

    一、嵌入式SQL的处理过程

    将书写的SQL语句嵌入到主语言中,主语言一般如c、c++、java等。对于这种嵌入式语言(ESQL),RDBMS的处理方式是采用预编译的方式,RDBMS的预处理程序对主程序的代码进行扫描,识别出其中的SQL语句,把它们转换成主语言调用语句,以使主语言调用语句的编译程序能够识别他们,然后主语言程序将纯主语言程序编译成目标代码

    二、存储过程

    存储过程是由PL/SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,因此称它们为存储过程,使用时只需要调用即可。

    存储过程的优点:

    1)、由于存储过程不像解释执行的SQL语句那样只在提出操作请求时才进行语法分析和优化工作,因而运行效率高,它提供了在服务器端快速执行SQL语句的有效途径。

    2)、存储过程降低了客户机与服务器之间的通信量。客户机上的应用程序只要通过网络向服务器发出存储过程的名字和参数,就可以让RDBMS执行多条语句,并执行数据处理。只有最终结果才返回客户端。

    3)、方便实施企业规则。可以把企业规则的运算程序写成存储过程放入数据库服务器中,由RDBMS管理,既有预计总控制又有利于维护。当用户规则发生变化时只要修改存储过程,无需修改其他应用程序。

    三、下面记述对异构数据库的访问技术

    数据库的种类有很多所以导致在一个数据库上边写的程序很难在应用到其他的数据库上,这给编程带来了很大的不变,因此由此便开发出异构数据库访问的技术。

    ODBC是微软开发开放服务体系(WOSA)中有关数据库的一个组成部分,他建立了一组规范,并提供了一组访问数据库的标准API,作为规范的他有两方面的功效和约束力:一方面是规范应用开发,另一方面规范RDBMS应用接口。

    主要讲述以下ODBC的工作原理,其他的异构数据库访问技术跟他大致相仿,所以只讲使用方法。

    ODBC的工作原理:
    下图配上ODBC的体系结构图:
    这里写图片描述

    其中ODBC的核心部分包括,应用程序接口的API,驱动程序管理器,各数据库驱动程序。

    应用程序:应用程序通过调用应用程序接口的API,调用标准的ODBC函数和SQL语句,实现与数据库的交互。

    驱动程序管理器:驱动程序管理器管理各种驱动程序,它包含在ODBC32.dll文件中,对用户来说是透明的,主要功能是装载ODBC驱动程序、驱动和连接正确的驱动程序、管理数据源,检查连接ODBC的参数的合法性及记录ODBC函数的调用等,当应用层需要时返回驱动程序信息。

    驱动程序:能够访问异构数据库的关键就是数据库驱动程序,有他提供了应用程序和数据库的独立性。当前的驱动程序主要分单束和多束。单束一般指数据源和应用程序在同一台机器上,驱动和程序直接完成对数据文件的IO操作,这时驱动程序相当于数据管理器。多束驱动程序支持客户/服务器模式,客户机/应用服务器/数据库服务器模式,这是驱动程序完成数据库的请求的提交和结果集接收,应用程序使用驱动程序提供的结果集管理接口操纵执行后的结果数据。

    数据源管理:数据源包含有数据库位置数据库类型 等信息,实际上是数据连接的一种抽象。ODBC给每位被访问的数据元指定唯一的数据源名DSN,并映射到所有的底层软件,在连接中的用数据源名来代表用户名,服务器名,所连接的数据库名等。最终用户无需知道数据源的存在。

    下面讲述ODBC的AIP:
    配上的应用程序句柄之间的关系图:
    这里写图片描述

    解析关系图,

    每个应用程序创建之后会生成一个ODBC实例,即一个环境句柄,对应于驱动程序管理器。每个ODBC中实例中对应有多个连接句柄,连接句柄就对应于驱动程序,语句句柄是指那些数据库操作的SQL语句,以及产生的结果集和相关信息。描述符句柄主要描述SQL语句的参数、结果集列的元数据集合。这里的数据源有必要提一下,数据源就是那些数据库,及数据库管理程序,同时,RDBMS就是充当数据库服务器的角色的。我们所说的连接数据库服务器就是指的DBMS。

    展开全文
  • ADO.net访问数据库技术包括数据连结,数据库查询、修改、更新和删除常规操作,是微软的系列课程。
  • ADO.NET数据库访问技术

    千次阅读 2017-07-27 10:10:26
    ADO.NET简介ADO.NET来源于COM组件库ADO(即ActiveX Data Objects),利用 .NET Data Provider (数据提供程序)进行数据库的连接和访问,通过ADO.NET,数据库程序能够使用各种对象来访问符合条件的数据库内容。...

    ADO.NET简介

    ADO.NET来源于COM组件库ADO(即ActiveX Data Objects),利用 .NET Data Provider (数据提供程序)进行数据库的连接和访问,通过ADO.NET,数据库程序能够使用各种对象来访问符合条件的数据库内容。
    ADO.NET结构模型

    ADO.NET是一个类库,这些类提供了很多的对象,可用于完成数据库的增删改查(CRUD)。包括的对象为:

    1. Connection :用来连接数据库(SQL server 使用的是SqlConnection对象)
    2. Command:用来对数据库执行SQL命令,如CRUD
    3. DataReader:从数据库中返回只读数据,用数据源填充DataSet对象
    4. DataAdapter:与DataSet对象相结合时用,实现对数据库的控制
    5. DataSet:可以看做是离线时内存中的数据库

    上述五中对象提供了两种对数据库的访问方式:

    1. 第一种方式:使用Connection、Command、DataReader,其权限只能读取或查询数据库
    2. 第二种方式:使用Connection、Command、DataAdapter、DataSet,其权限能进行各种数据库操作

    ADO.NET访问数据库操作示意图如下:
    数据库访问示意图
    使用ADO.NET在线访问数据库的步骤
    连接数据库:

    using System.Data.SqlClient;
    string source = "server=(local); integrated security=SSPI;  database=myDateabase; User ID=sa; pwd=sa"; 
    SqlConnection conn = new SqlConnection(source); 
    conn.Open(); 
    // 对数据库数据进行操作
    conn.Close();
    
    1. 首先添加命名空间:System.Data.SqlClient;
    2. 定义数据库连接字符串:
      第一种方法:直接把数据库链接字符放在字符串对象中,如上代码;
      第二种方法:将数据库连接信息存放在web.config配置文件中,通过使用ConfigurationStringSettings类进行调用:
    • 首先,在web.config文件中定义数据库连接信息:
    <configuration>
    	<connectionStrings>
    		<add name="myDatabase" connectionString=" server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa" providerName="System.Data.SqlClient" />	
    	</connectionStrings>
    </configuration>
    
    • 在项目文件中,添加对Configuration的引用,需要引入命名空间“System.Configuration”,然后定义数据库连接字符串为:
    string connstring = ConfigurationManager.ConnectionStrings["myDatabase"].ConnectionString;
    

    创建数据库连接

    创建Connecton对象:
    string conn = new SqlConnection(connString);
    打开数据库:conn.Open()

    一般情况下,当在.NET中使用“稀缺”的资源时,如数据库连接、窗口或图形对象,最好确保每个资源在使用完毕后立即关闭。尽管.NET的设计人员实现了自动垃圾收集机制,垃圾最终会被回收,但仍需要尽可能早地释放资源,以避免出现资源匮乏的情况。 当编写访问数据库的代码时,因为使连接打开的时间略长于需要的时间,就可能影响其他会话。在极端的情况下,不关闭连接可能会使其他用户无法进入一整组数据表,极大地降低应用程序的性能。主要有两种方式可以确保数据库连接等类似的“稀缺”资源在使用完后立即释放。

    • 释放资源的方式:
      1. 采用try...catch...finally语句块 确保在finally中关闭任何已打开的连接;
    try 
    { 
    	// open the connection 
    	conn.Open(); 
    	// 对数据库数据进行操作 
    } catch (SqlException ex) { 
    	// log the exception 
    } finally { 
    	conn.Close(); 
    }
    
    1. 使用using语句块,无论块是如何退出的,using子句都会确保关闭数据库连接
    using(SqlConnection conn = new SqlConnection(connstring)){ 
    		// Open the connection 
    		conn.Open(); 
    		// 对数据库数据进行操作 
    	}
    

    创建数据库操作命令
    Connection对象与数据源建立连接后,使用Command对象对数据源执行查询、插入、修改和删除等操作。

    1. 创建SQL数据库操作命令
    2. 创建Command对象,方法:
    方法一:
    SqlCommand command = new SqlCommand(); 
    command.Connection = conn; 
    command.CommandText = "SQL语句"; 
    方法二:
    SqlCommand command = new SqlCommand("SQL语句", conn); 
    

    备注:
    1). SQL查询语句若含有C#程序的变量并以字符串形式连接,则应注意数据为非数字的变量应用单引号括起来;
    2). 在SQL查询语句中使用参数化查询语句的话,譬如:command.CommandText = "SELECT * FROM myTable WHERE siteName=@siteName";为参数赋值时,需要使用Command对象建立参数对象,然后再赋值:
    command.Parameters.Add(new SqlParameter(@siteName, siteName))
    command.Parameters["@siteName"].Value = "http://#";

    备注: 在.Net Framework 2.0中SqlClient增加了AddWithValue(string parameterName, object value)方法。该方法简化了调用储存过程的输入参数过程,在运行时对所输入的数据类型进行判断,获取对应的数据库类型。 因此该方法在运行效率上比用 Add(string parameterName, SqlDbType sqlDbType, int size, string sourceColumn)方法要低。 在效率要求较高的地方仍然建议使用Add()方法,其它场合可以使用AddWithValue()简化代码编写量

    执行sqlQuery命令
    定义好命令后,就需要执行它。执行的语句有多种方式,这取决于要从命令中返回什么数据。Command类提供了下述可执行的命令:

    1. ExecuteNonQuery() —— 执行命令,但不返回任何结果。一般用于UPDATE、INSERT或DELETE语句中,其中唯一的返回值是受影响的记录个数。但如果调用带有输出参数的存储过程,该方法就有返回值。
    2. ExecuteReader() —— 执行命令,返回一个类型化的IDataReader。是从数据源中选择某些数据的最简单快捷的方法
    3. ExecuteScalar() —— 执行命令,返回结果集中的第一行第一列的值

    对数据库操作完毕后关闭数据库连接conn.Close();

    离线数据库访问

    DataAdapter对象主要在Connection对象和DataSet对象之间执行数据的传输工作,将数据填充到DataSet对象中,也可把DataSet对象更新后的数据返回到数据源中,也可架构在Command对象上,通过CommandBuilding对象生成DataAdapter的Insert、Update和Delete等SQL操作命令。使用DataSet和DataTable对象访问数据源后,ADO.NET会自动离线,在内存中处理数据,如有修改数据的操作,将自动重新连接数据源,更新数据库。DataSet对象、DataAdapter对象与数据源之间的关系如下:
    DataSet <—> DataAdapter <—> 数据源

    下面是使用DataAdapter进行离线数据库访问的操作步骤:

    1. 创建DataAdapter、DataTable对象(使用的是SQL Server数据库)
    SqlAdapter da = new SqlAdapter("sqlQuery查询语句", conn);
    DataSet ds = new DataSet(); 
    
    1. 将数据填充到DataTable对象
    da.Fill(ds, "TableName"); dt = ds.Tables["TableName"]; 
    
    1. 对DataTable中的数据进行处理 TataTable对象的属性和方法有:
    名称属性/方法说明
    Rows.Add()方法插入新数据行
    Rows[n].Delete()方法删除第n行的记录
    Rows.Count属性获取行数
    Rows[i][“ColumnName”]属性获取第i行、列名为ColumnName的值
    Rows[i][j]属性获取第i行、第j列的值
    展开全文
  • 这个是我做的一个很简单的剧本的数据库访问技术包括了增删改查的实现和水晶报表,做的怎么好,多多指教!
  • ADO.NET(ActiveX Data Object.NET)是Microsoft公司开发的用于数据库连接的一套组件模型,是ADO的升级版本... ADO.NET是与数据库访问操作有关的对象模型的集合,它基于Microsoft的.NET Framework,在很大程度上封装了数
  • 数据库访问方式

    千次阅读 2019-04-20 16:17:22
    数据库访问方式
  • 柴晟版ADO.NET数据库访问技术案例式教程_教学包,包括 电子教案(修订版),示例代码,试卷,课程说明,北航出版社
  • .net技术中的数据库访问,包括了数据库的连接,以及对数据库进行增、删、改的操作
  • 数据库安全技术

    千次阅读 2020-03-29 19:47:24
    数据库访问方式: 通过数据库协议直接访问 通过CS三层结构 通过Web 通过运用接口 数据库面临的主要安全威胁: 2、数据库安全防护产品介绍 主要的数据库安全产品包括:数据库审计、数据库安全网关、数据库脱敏...
  • 数据库访问技术之JDBC

    千次阅读 2014-06-18 17:48:04
    在了解JDBC之前呢,我们可以先对ODBC做一个回顾,以便于更好的理解JDBC。看名字也知道这两个关系一般,他们实现了同样的功能,为应用程序连接和操作数据库...它是一系列的规范和对数据库访问的API。那么API+SQL就可以
  • 常见数据库漏洞

    千次阅读 2019-05-13 11:27:02
    MySQL数据库 默认端口:3306 攻击方法: 爆破:弱口令 身份认证漏洞:CVE-2012-2122 拒绝服务攻击 Phpmyadmin万能密码绕过:用户名:‘localhost’@’@” 密码任意 提权 参考: https://www...
  • ASP技术访问WEB数据库

    2014-04-09 16:59:15
    asp的开发技术web技术访问数据库技术包括程序的设计,开发利用
  • 数据库技术前沿总结

    万次阅读 多人点赞 2018-12-31 08:14:26
    (1)面向对象的方法和技术数据库发展的影响最为深远数据库研究人员借鉴和吸收了面向对象的方法和技术,提出了面向对象数据模型(简称对象模型)。该模型克服了传统数据模型的局限性,促进了数据库技术在一个新的...
  • 四种数据库访问技术

    千次阅读 2012-03-14 09:29:14
    l ODBC(Open Database Connectivity) 开放式数据库连接,是一种用来在数据库管理系统(DBMS...即数据访问对象集,是Microsoft提供的基于一个数据库对象集合的访问技术。和ODBC一样,他们都是Windows API的一部分
  • ADO数据库访问技术概述

    千次阅读 2011-03-24 13:48:00
    前面已经了解了在Visual C++下进行数据库编程,可供选择的访问技术有许多,我们需要根据情况选择适当的技术。在此我们就来具体了解这些技术的概貌。     ADO对象模型组成 ADO是一组由...
  • 数据库编程技术,JDBC接口技术数据库连接代码,以及SQL访问代码。。。
  • 全书以一个“考生数据库”为例贯穿始终,通过连续性的、功能丰富的实例介绍Access数据库各个对象的操作方法,包括数据表、查询、窗体、报表、数据访问页、宏和模块。最后以“超市管理系统”为例,综合、细致地介绍...
  • 数据库访问技术

    千次阅读 2013-11-14 17:32:08
    一、ODBC ODBC的由来 ...随后ODBC便获得了许多数据库厂商和Third-Party的支持而逐渐成为标准的数据存取技术。 ODBC以当时的业界标准规范X/OpenCall-LevelInterface(CLI)和ISO/IEC9075-3Call-
  • 常见数据库面试问题

    万次阅读 多人点赞 2018-03-08 20:12:45
    常见数据库面试题有哪些呢?(非DBA向) (一)什么是存储过程?有哪些优缺点? 存储过程是一些预编译的SQL语句。 更加直白的理解:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句...
  • 现在我们讲使用数据库来进行变成,具体的提供了SELECT INSERT UPDATE DELETE等数据库的执行语句,这是在数据库的接口,当在图形下显示数据时需要使用... 这些类提供了访问数据库,提出一个连接请求,如同文件访问一样
  • SQL Server数据库应用技术

    千次阅读 2017-09-09 01:14:50
    SQL Server数据库应用技术 SQL是Structured Query Language的缩写。SQL是为数据库而建立的操作命令集,是一种功能齐全的数据库语言。SQL功能强大、简单、易学、使用方便,已经成为了数据库操作的基础,并且现在几乎...
  • 数据库学习】数据库总结

    万次阅读 多人点赞 2018-07-26 13:26:41
    常见数据库管理系统有:Access、mysql、sql server 2)特点 ①数据库数据特点 永久存储、有组织、可共享。 (数据的最小存取单位是数据项) ②数据库系统的特点 数据结构化 数据的...
  • 前面已经了解了在Visual C++下进行数据库编程,可供选择的访问技术有许多,我们需要根据情况选择适当的技术。在此我们就来具体了解这些技术的概貌。 DO对象模型组成 ADO是一组由微软提供的COM组件,基于面向对象...
  • VC++2010ADO数据库访问

    热门讨论 2011-03-31 20:01:52
    利用ADO数据库访问技术访问Access数据库,其中涉及了查询,编辑,插入,更新,新增,删除等等操作,代码整洁,易于阅读,容易理解,程序极易扩展,有利于你的进一步开发,为你的下一步编程做好铺垫,并且将数据库,...
  • 本书以“学籍管理数据库系统”教学案例为主线,模拟软件开发...内容包括:系统分析、概念模型的设计、逻辑模型设计、数据库的物理结构设计、数据的输入与维护、数据查询、数据库保护、编程优化数据库、数据库访问技术
  • 常见数据库知识总结 + 30个数据库常见面试题讲解

    万次阅读 多人点赞 2018-10-24 21:55:36
    常见数据库知识总结 MYAQL:事务:事务是并发控制的基本单元,事务是一个操作序列,要么都执行,要么都执行,他是一个可分割的工作单位,事务是维护数据库一致性的单位。 四个ACID基本性质: 1.原子性:要么...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 489,380
精华内容 195,752
关键字:

常见的数据库访问技术不包括