首页
社区
课程
招聘
[分享]ODBC-SQL学习笔记
发表于: 2009-10-8 23:59 6335

[分享]ODBC-SQL学习笔记

2009-10-8 23:59
6335
前段时间学习SQL做的笔记,很简单,高手就飘过吧!
从网上看了很多资料,特别是罗云彬的ODBC。

ODBC-SQL学习笔记

一.ODBC的四个组成部分

   1. 应用程序(Application,你的程序)
   2. ODBC 管理器 (ODBC manager)
   3. ODBC 驱动程序 (ODBC Drivers)
   4. 数据源 (Data Sources,数据库)
   
   你的程序 <-----> ODBC管理器 <-----> ODBC驱动程序 <-----> 数据库

二.ODBC编程的一般步骤
   
   1. 连接数据源
      a. 分配一个环境句柄(environment handle),可以修改环境属性来适合我们的需要.
          SQLAllocHandle, SQL_HANDLE_ENV, SQL_NULL_HANDLE, addr hEnv
       b. 选择ODBC的版本
          SQLSetEnvAttr, hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3,NULL
       c. 分配一个连接句柄.
          SQLAllocHandle, SQL_HANDLE_DBC, hEnv, addr hConn
       d. 建立连接.
          SQLDriverConnect, hWnd, pInconnectString, InStringLength, pOutConnectString
              OutBufferSze, pOutConnectStringLength, DriverCompletion               
   2. 创建并执行SQL语句
      a. 申请语句句柄
       b. 执行SQL语句 
       c. 释放语句句柄
   3. 检查结果记录(如果有的话)
   4. 断开数据源
      a. 断开与数据源的连接.
          SQLDisconnect, hConn (连接句柄)
       b. 释放连接句柄
          SQLFreeHandle, SQL_HANDLE_DBC, hConn 
       c. 释放环境句柄 (如果不再需要在这个环境中作更多连接)
          SQLFreehandle, SQL_HANDLE_ENV, hEnv

三.用到的API函数
   
    1. SQLAllochandle (SQLSMALLINT HandleType,   
                           //输入  要分配的句柄为类型,必须是
                               //SQL_HANDLE_ENV     环境句柄
                               //SQL_HANDLE_DBC     连接句柄
                               //SQL_HANDLE_STMT    语句句柄
                               //SQL_HANDLE_DESC    描述符句柄
                        SQLINTEGER  InputHandle, 
                           //输入  描述分配句柄的上下文的句柄,如果
                               //htype是SQL_HANDLE_ENV则这里应是SQL_NULL_HANDLE
                        SQLINTEGER  OutputHandle,) 
                        //输出  指向句柄的指针,返回的句柄.
        说明:
            HandleType 是一个常数,定义希望分配的句柄类型.
            InuptHandle 是指向父"文本"的句柄,就是说,如果你想分配一个连接句柄,需要
         通过一个环境句柄,因为连接将在那个环境文本的建立,如果你想分配一个环境句柄,这个
         参数必须为SQL_NULL_HANDLE.对于语句和描述符句柄,我们需要将连接句柄作为这个参数.
                描述符是一个数据集合,描述了一个SQL语句的参数或一个结果集的列数,视应用程
         序或驱动程序而定.
            
         返回码:
                  SQL_SUCCESS            //成功
                SQL_ERROR              //错误
                SQL_INVALID_HANDLE     //句柄非法
                  SQL_SUCCESS_WITH_INFO  //成功,但带回非致命错误或警告
                
     2. SQLSetEnvAttr (EnvironmentHandle:DWORD,
                        //环境句柄
                      Attribut:DWORD,
                      Valuptr:DWORD,
                      StingLength:DWORD)
       说明:
               EnvironmentHandle 设置属性的环境句柄
                 Aattribut 设置的属性
                 ValuePtr 由希望设置的属性值决定,如果属性值是32位的, 这个参数将被认为是
         想要设置的属性值,如果属性值是一个字符串或二进制缓冲区,它就被解释为指向字符串或缓
         冲区的指针
                 StringLength. 由ValuePtr指向的值的长度. 如果这个值是字符串或二进制缓冲
         区,这个参数一定是合法.如果想设置的属性是一个双字,这个参数被忽略

3.  SQLDriverConnect (hWnd:DWORD,
                         //hWnd 程序窗口句柄.如果被置为NULL,驱动程序将不会为
                                //用户显示一个对话框来显示更多信息(如果有的话)
                      pInConnectString:DWORD,
                         //指向连接字符串的指针
                      InStringLength:DWORD,
                         // 连接字符串的长度
                      pOutConnectString:DWORD,
                         //指向将要被填入完整连接字符串的缓冲区的指针
                      OutBufferSize:DWORD,
                         //由pOutConnectString指向的缓冲区的长度
                      pOutConectStringLength:DWORD,
                         //用来接收由ODBC驱动程序返回的完整连接字符串的长度   
                             DriverCompletion:DWORD)
                                      //指示ODBC管理器/驱动程序是否将提示用户更多信息,如
                                      //果hWnd没有传送窗口句柄,该标志被设置,也不会提于用户
4.  SQLExecDirect (StatementHandle:DWROD, //直接执行SQL语句
                      //语句句柄
                   pStatementText:DWROD,
                      //SQL语句的指针
                   TextLength:DWORD)
                                  //SQL语句的长度
返回值:

         SQL_SUCCESS     成功
                     SQL_ERROR       失败
                     SQL_INVALID_HANDLE 使用的语句句柄非法
                     SQL_NEED_DATA 执行SQL语句没有提供足够的参数.需调用SQLParamData或SQLPutData提交参数
                     SQL_NO_DATA   如果SQL语句不返回结果集,例如只是一个查询动作,将获得这个返回值
                     SQL_STILL_EXECUTING 如果异步执行SQL语句,SQLExecDirect 会立刻返回这个值,表明语句正在执行
                     如果你希望异步执行,可以通过SQLSetStmtAttr来设置语句属性

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
去看看C#吧。忠心告诉一下。
2009-10-12 21:04
0
雪    币: 163
活跃值: (12)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
喜欢用API写东西,个人爱好。
2009-10-13 03:13
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
写得很好,支持一下,顺手学习一下,楼主能否写一些简单例子出来,更容易配合理解,谢谢!
2009-10-14 21:55
0
雪    币: 615
活跃值: (1127)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
想起了一个大牛的博客

http://hi.baidu.com/combojiang/blog/item/eb684b8f8ef11dfc513d92eb.html
2009-10-14 23:25
0
游客
登录 | 注册 方可回帖
返回
//