VB数据库编程的几点心得

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 xiaoboey 的 blog

 

一、adodb.connection的连接字符串(connectionstring)的生成之道
  ado是当前访问数据库的主流,但其connectionstring往往有一大串,并且在访问不同的数据库(如access和sql server),或访问方式(通过odbc和ole db)不一样时,其具体参数的设置差异很大,这给连接字符串的编写增加了一定的难度。这里给大家介绍两种生成connectionstring的方法,以便在没有现成的资料可供参考时,写出需要的连接字符串。
  方法一,使用adodc控件的连接字符串向导生成连接字符串。
  用vb新建一标准exe工程,先引用adodc部件(选菜单[工程]\[部件...],在弹出的部件窗口中选microsoft ado data control),再将其加到form1上,默认名为adodc1;选中adodc1,在其上单击右键,单击“adodc属性”,选“使用连接字符串”,单击“生成”按钮,接下来根据该向导一步一步输入各相关的连接信息,“确定”后,在“使用连接字符串”下面的文本框中就是我们需要的内容。
  方法二,调用ado连接窗口,获得连接字符串。
  用vb新建一标准exe工程,引用microsoft ole db service component 1.0 type libary和microsoft activex data objects 2.x library(具体操作与adodc的引用类似,只是通过菜单[工程]\[引用...]选),加一个textbox到form1,双击form1,进入code编辑区,清除vb自动生成的所有代码,再输入下述代码:

  option explicit

  private sub form_load()
      dim dltemp as msdasc.datalinks
      dim cntemp as adodb.connection
   
      set dltemp = new msdasc.datalinks
      set cntemp = new adodb.connection
   
      dltemp.promptedit cntemp
      text1.text = cntemp.connectionstring

      set dltemp = nothing
      set cntemp = nothing
  end sub

  运行时会弹出一个与adodc相似的生成连接字符串的向导,输入各相关数据,“确定”后在form1的text1中就得到我们需要的连接字符串。

二、汉字乱码问题
  笔者曾经在使用ado向sql server 6.5中追加或修改数据后,发现查询出来的汉字都是乱码,最初以为是客户端的环境有问题,后来打开服务器端的数据库,发现其中的汉字也都是乱码,费了九牛二虎之力才找到原因:在追加和修改的过程中,ado将字符进行了自动翻译(autotranslate),翻译后就成了乱码(microsoft给我们开了一个“小小”的玩笑),解决的办法就是不让它乱翻译,具体操作如下:
  如果ado通过ole db直接连接到数据库,则在connection的connectionstring中加入字符串:autotranslate=false;
  如果ado通过odbc连接到数据库,则在配置odbc时,将“执行字符数据转换”一项的勾去掉。

三、在sql中处理含单引号的字符串
  vb在写sql时,对字符串数据都用单引号引起来,如:
    select * from mytable where id='firstid'
若其中的firstid为first'id,即中间多出一个单引号,则上述写法将导致错误,解决的办法是将字符串中的每一个单引号用两双引号替换,下面的函数strtosql完成该功能,并用单引号将处理后的字符串引起来:
  private function strtosql(byval strvalue as string) as string
        strtosql = "'" + replace(strvalue, "'", "''") + "'"
    end function
  在写sql时如有字符串数据,不管其中有没有单引号,都可以这样使用:
        strvalue="first'id"
    strsql="select * from mytable where id="+strtosql(strvalue)

四、只返回查询结果的前n个记录
  这是个老生常谈的问题,稍有这方面经验的人都会想到在sql中用"select top"语句来完成此功能,如访问access数据库时为:
  select top 50 * from mytable
    sql server 7.0和sql server 2000中都可以这样,但在sql server 6.5中不行,它不支持"select top",笔者采用了一个折衷的办法,使用sql server 6.5的"set rowcount"来限制记录数,例如:
    myconnection.execute "set rowcount 50"
    ......'执行查询
    myconnection.execute "set rowcount 0"    
    最后一行表示取消记录数据限制,这句千万不能少,因为记录数的限制在myconnection的生存期都有效,所以其它的查询也会受此限制,最多只返回50条记录,笔者曾深受其害。

本文中涉及的内容的测试平台为visual baisc 6.0 enterprise+service pack 4。

本文关键:连接字符串,汉字乱码,单引号,SQL
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top