原创 ADO事例收藏

新一篇: 一个Javascript 图片滚动类 | 旧一篇: ADO概述

本文提供了一个ADO的事例,举例说明了ADO的基本操作,包括:数据集,存储过程等。

环境: SQL2005 Express 数据库,VS.net2003,ADO2.7

注意:存储过程的参数传递顺序,当需要获取过程的返回值时,必须把返回值作为第一个参数传给Command对象。

下面是SQL脚本[ Setup.sql ]:

USE [master]
GO
/****** Object:  Database [UTDB]    Script Date: 12/30/2006 09:39:30 ******/
CREATE DATABASE [UTDB] ON  PRIMARY 
( NAME 
= N'UTDB', FILENAME = N'UTDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 
LOG ON 
( NAME 
= N'UTDB_log', FILENAME = N'UTDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
 COLLATE Chinese_PRC_CI_AS
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'UTDB'@new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [UTDB].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO
ALTER DATABASE [UTDB] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [UTDB] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [UTDB] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [UTDB] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [UTDB] SET ARITHABORT OFF 
GO
ALTER DATABASE [UTDB] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [UTDB] SET AUTO_CREATE_STATISTICS ON 
GO
ALTER DATABASE [UTDB] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [UTDB] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [UTDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [UTDB] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [UTDB] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [UTDB] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [UTDB] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [UTDB] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [UTDB] SET  ENABLE_BROKER 
GO
ALTER DATABASE [UTDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [UTDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [UTDB] SET TRUSTWORTHY OFF 
GO
ALTER DATABASE [UTDB] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO
ALTER DATABASE [UTDB] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [UTDB] SET  READ_WRITE 
GO
ALTER DATABASE [UTDB] SET RECOVERY SIMPLE 
GO
ALTER DATABASE [UTDB] SET  MULTI_USER 
GO
ALTER DATABASE [UTDB] SET PAGE_VERIFY CHECKSUM  
GO
ALTER DATABASE [UTDB] SET DB_CHAINING OFF 

USE [UTDB]
GO
/****** Object:  Table [dbo].[BITS_Job]    Script Date: 12/30/2006 09:42:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[BITS_Job](
    
[jobGUID] [uniqueidentifier] NOT NULL,
    
[name] [nvarchar](256) COLLATE Chinese_PRC_CI_AS NOT NULL,
    
[progress] [int] NULL,
    
[action] [int] NOT NULL CONSTRAINT [DF_BITS_Job_open]  DEFAULT ((1)),
 
CONSTRAINT [PK_BITSJob] PRIMARY KEY CLUSTERED 
(
    
[jobGUID] ASC
)
WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFFON [PRIMARY]
ON [PRIMARY]

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description'@value=N'Job 的显示名称' , @level0type=N'SCHEMA',@level0name=N'dbo'@level1type=N'TABLE',@level1name=N'BITS_Job'@level2type=N'COLUMN',@level2name=N'name'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description'@value=N'决定数据下载完成后执行什么动作:0,不管; 1,打开文件; 2,执行文件;' , @level0type=N'SCHEMA',@level0name=N'dbo'@level1type=N'TABLE',@level1name=N'BITS_Job'@level2type=N'COLUMN',@level2name=N'action'


USE [UTDB]
GO
/****** Object:  StoredProcedure [dbo].[BITS_GetJobAction]    Script Date: 12/30/2006 09:52:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
--
 Author:     lava_sdb,,BITS_GetJobAction
--
 Create date: 12/30/2006
--
 Description:  
--
 =============================================
CREATE PROCEDURE [dbo].[BITS_GetJobAction]
    
@jobGuid uniqueidentifier,
    
@action int OUTPUT
AS
BEGIN
    
--DECLARE @action int
    --SELECT @action=0

    
-- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    
-- Insert statements for procedure here
    SELECT @action=[action]
        
FROM dbo.BITS_Job
        
WHERE jobGUID = @jobGuid

    
return @action
END


/****** 插入事例数据 ***********/

INSERT INTO [dbo].[BITS_Job] ([jobGUID],[name],[progress],[action]
        
VALUES(newID(),'Test1',0,0  )

INSERT INTO [dbo].[BITS_Job] ([jobGUID],[name],[progress],[action]
        
VALUES(newID(),'Test2',0,0  )

INSERT INTO [dbo].[BITS_Job] ([jobGUID],[name],[progress],[action]
        
VALUES(newID(),'Test3',0,0  )

INSERT INTO [dbo].[BITS_Job] ([jobGUID],[name],[progress],[action]
        
VALUES(newID(),'Test4',0,0  )


 

下面是程序文件:

// GetBITS.cpp : 定义控制台应用程序的入口点。

#include 
"stdafx.h"
#import 
"c:Program FilesCommon FilesSystemADOmsado15.dll" no_namespace rename("EOF""EndOfFile")

#include 
<iostream>
#include 
<iomanip> 
using namespace std;

#define SQL_BITS "Provider='SQLNCLI';Data Source='np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query';Initial Catalog='UTDB';Integrated Security='SSPI';"

//////////////////////////////////////////////////////////////////////////
//  显示数据库中的所有 Job
//  举例使用记录集
//////////////////////////////////////////////////////////////////////////
void DisplayJob()
{
    _RecordsetPtr m_pRecordset(
"ADODB.Recordset");
    _ConnectionPtr m_pConnection(
"ADODB.Connection");

    _bstr_t bstrSQL(
"select * from BITS_Job"); //查询语句 
    try
    
{
        
// 创建Connection对象
        m_pConnection.CreateInstance("ADODB.Connection");
        
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
        
//_bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=UTDB; uid=sa; pwd=sdbfirst;";
        _bstr_t strConnect = SQL_BITS;

        
// 建立与数据库的连接
        m_pConnection->Open(strConnect,"","",adModeUnknown);
        
if(m_pConnection==NULL) {
            cerr
<<"Lind data ERROR! ";
        }


        
// 创建记录集对象
        m_pRecordset.CreateInstance(__uuidof(Recordset));
        
// 取得表中的记录
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
            adOpenDynamic,adLockOptimistic,adCmdText);

        _variant_t vsGuid, vsName,vsProgress; 
        cout 
<< "Guid  名称   进度 ";
        cout 
<< " ---------------------------------------------------------------- ";

        
while (!m_pRecordset->EndOfFile)
        
{
            vsGuid 
= m_pRecordset->GetCollect(_variant_t((long)0));//这儿给字段编号和字段名都可以 
            vsName = m_pRecordset->GetCollect("name");
            vsProgress 
= m_pRecordset->GetCollect("progress");

            
if (vsGuid.vt != VT_NULL && vsName.vt != VT_NULL 
                
&& vsProgress.vt != VT_NULL)
            
{
                cout.setf(ios::left);
                cout 
<< setw(14<< (char*)(_bstr_t)vsGuid;
                cout 
<< setw(14<< (char*)(_bstr_t)vsName;
                cout 
<< setw(8<< vsProgress.lVal;
                cout.unsetf(ios::left);
                cout 
<< endl;
            }
 

            m_pRecordset
->MoveNext(); ///移到下一条记录
        }

    }

    
catch (...) {
        cout 
<< "Error";
    }

}


void InsertJob()
{
    _ConnectionPtr pConnection(
"ADODB.Connection");

    
try
    
{
        
// 创建Connection对象
        pConnection.CreateInstance("ADODB.Connection");
        
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
        _bstr_t strConnect = SQL_BITS;

        pConnection
->Open(strConnect,"","",adModeUnknown);
        
if(pConnection != NULL) 
        
{
            _bstr_t vsGuid, vsName,vsProgress;             
            
            GUID ng 
= {0xFFA9F2A7,0x478A,0x4075,0x44,0x55,0x55,0x55,0x55,0x55,0x55,0x55};

            
char cGuid[50= {0};
            sprintf( cGuid, 
"'%x-%x-%x-%x%x-%x%x%x%x%x%x',",
                    ng.Data1, ng.Data2, ng.Data3,
                    ng.Data4[
0],ng.Data4[1],ng.Data4[2],ng.Data4[3],
                    ng.Data4[
4],ng.Data4[5],ng.Data4[6],ng.Data4[7]);
            
            vsGuid 
= cGuid;
            vsName 
= "'TeName',";
            vsProgress 
= 1;

            _bstr_t strSQL(
"Insert into BITS_Job( jobGUID,name,progress) Values(");

            strSQL 
+= vsGuid + vsName + vsProgress ;
            strSQL 
+= ")";

            printf(
"%s ",(LPCSTR)strSQL);

            
//Execute the insert statement
            pConnection->Execute(strSQL,NULL,adExecuteNoRecords);

            printf(
"Data Added Successfully ",(LPCSTR)strSQL);

            
// 关掉数据库连接
            pConnection->Close();
        }

    }

    
catch (...) {
        cout 
<< "Error";
    }

}



void RemoveJob()
{
    _ConnectionPtr pConnection(
"ADODB.Connection");

    
try
    
{
        
// 创建Connection对象
        pConnection.CreateInstance("ADODB.Connection");
        
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
        _bstr_t strConnect = SQL_BITS;

        
//若数据库在网络上则Server为形如(192.168.1.5,3340)
        
//用户sa和密码123只是针对我的库 <