VB数据库编程的几点心得
2001-08-28 08:11
253 查看
一、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。
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。
相关文章推荐
- VB数据库编程的几点心得
- 关于用VC,VB进行图像数据(二进制大对象)存储数据库的一点心得
- VB 串口编程 开发心得
- RDO和VB数据库编程
- 编写VB打印控制程序的几点心得
- 数据库编程实战---经验心得
- VB数据库编程实现添加、查询、修改、删除
- VB编程如何态改变数据环境动的数据库链接
- [VB.NET]vb.net的数据库编程求教,请各位大侠不吝指教.
- VB.NET数据库基础编程
- 在VB中用DAO实现数据库编程
- 关于用VC,VB进行图像数据(二进制大对象)存储数据库的一点心得
- Data控件在vb数据库编程中的应用
- vb数据库编程精华例题分享
- VB.NET的数据库基础编程
- 用VB编写ActiveX DLL实现ASP编程(主要是数据库连接)
- 关于Android 数据库使用的几点心得
- Vb中数据库编程对象——ADO
- windows下实现win32俄罗斯方块练手,编程的几点心得
- windows下实现win32俄罗斯方块练手,编程的几点心得