Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2101147
  • 博文数量: 454
  • 博客积分: 10921
  • 博客等级: 上将
  • 技术积分: 5396
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-15 15:20
个人简介

伪IT男

文章分类

全部博文(454)

文章存档

2016年(2)

2013年(6)

2012年(17)

2011年(29)

2010年(24)

2009年(54)

2008年(53)

2007年(202)

2006年(67)

分类:

2009-09-10 21:50:51

在vb.net中使用odbc数据源。需要odbc.net的支持。
1.下载ODBC.NET (FrameWork 2.0以上默认未安装)
下载地址:
2.创建项目,添加Microsoft.Data.ODBC.dll 引用
3.vb.net里要通过odbc连接数据库
在vb.net中创建一个module
imports   System.Data  
  Imports   System.Data.Odbc  
   
  ‘数据连接部分  
  myStrConn   =   "DSN=Check2005;PWD=xg2005;"  
  Try  
          myConn   =   New   OdbcConnection(myStrConn)  
          myConn.Open()  
  Catch   ex   As   Exception  
          MsgBox("数据库连接发生错误!",   MsgBoxStyle.OKOnly,   "系统错误")  
  End   Try   
    
   
4.数据获取部分   
  Imports Microsoft.Data.Odbc
Module Module1
Sub Main()
Dim conn As OdbcConnection
Dim comm As OdbcCommand
Dim dr As OdbcDataReader
Dim connectionString As String
Dim sql As String
connectionString = "DSN=PracticalLotusScriptTest;UID=Chester;Pwd=Tester;"
sql = "SELECT CustomerID, ContactName, ContactTitle FROM Customers"
conn = New OdbcConnection(connectionString)
conn.Open()
comm = New OdbcCommand(sql, conn)
dr = comm.ExecuteReader()
While (dr.Read())
Console.WriteLine(dr.GetValue(0).ToString())
Console.WriteLine(dr.GetValue(1).ToString())
Console.WriteLine(dr.GetValue(2).ToString())
End While
conn.Close()
dr.Close()
comm.Dispose()
conn.Dispose()
End Sub
End Module 
5.插入记录
Dim myConnectionString As String
        myConnectionString = "DRIVER={SQL Server};SERVER=SHA-RICKIE-01;UID=user;Trusted_connection=true;DATABASE=test;"
        Dim myConn As New OdbcConnection(myConnectionString)
        Dim myInsertQuery As String = "INSERT INTO friends (name,age,gender,address) Values('odbc', 88,'male','shanghai')"
        Dim myOdbcCommand As New OdbcCommand(myInsertQuery)
        myOdbcCommand.Connection = myConn
        myConn.Open() 
        myOdbcCommand.CommandType=CommandType.StoredProcedure ‘(这句是关键)
        myOdbcCommand.ExecuteNonQuery()
        myConn.Close()
6.delete record
        Dim myInsertQuery1 As String = "delete all from DBA.dossierm;" ' where id =000001"
        Dim myOdbcCommand1 As OdbcCommand
        myOdbcCommand1 = New OdbcCommand(myInsertQuery1)
        myOdbcCommand1.Connection = conn
        myOdbcCommand1.CommandType = CommandType.StoredProcedure
        myOdbcCommand1.ExecuteNonQuery()
        myOdbcCommand1.Dispose()
7.
Dim dbfile As String
            dbfile = OpenFileDialog2.FileName
 
            Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey
            'key = Microsoft.Win32.Registry.CurrentUser  'key为HKEY_USERS根键
            'subkey = key.CreateSubKey("Software\vb.net")  '在HKEY_USERS\software下创建一个vb.net子键
            'subkey.SetValue("GOOD?", "of course") '在HKEY_USERS\software\vb.net下设置一个键值,键值名为good?,值为of course了
            key = Microsoft.Win32.Registry.LocalMachine
            subkey = key.CreateSubKey("SOFTWARE\ODBC\ODBCINST.INI\asa")
            subkey.SetValue("driver", "c:\\sdkj\\dbodbc6.dll")
            subkey.SetValue("setup", "c:\\sdkj\\dbodbc6.dll")
 

            '        [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\asa]
            '"driver"="c:\\sdkj\\dbodbc6.dll"
            '"setup"="c:\\sdkj\\dbodbc6.dll"
            Dim permissionCheck As Microsoft.Win32.RegistryKeyPermissionCheck
            permissionCheck = Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree

            key = Microsoft.Win32.Registry.CurrentUser
            subkey = key.OpenSubKey("Software\ODBC\ODBC.INI\ODBC Data Sources", permissionCheck)
            subkey.SetValue("sutao", "asa")

            '[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources]
            '"sutao"="asa"
            key = Microsoft.Win32.Registry.CurrentUser
            subkey = key.CreateSubKey("Software\ODBC\ODBC.INI\sutao")
            subkey.SetValue("AutoStop", "YES")
            subkey.SetValue("DatabaseFile", dbfile)
            subkey.SetValue("Debug", "NO")
            subkey.SetValue("DisableMultiRowFetch", "NO")
            subkey.SetValue("Driver", "c:\\sdkj\\dbodbc6.dll")
            subkey.SetValue("Integrated", "NO")
            subkey.SetValue("PWD", "sql")
            subkey.SetValue("UID", "dba")
            subkey.SetValue("start", "c:\\sdkj\\dbeng6.exe -c 8m -Q")
8.获取表中记录的个数

        Dim sqlstr = "select count(0) from DBA.dossierm;"
        Dim SqlComm As OdbcCommand
        SqlComm = New OdbcCommand(sqlstr, conn)
        Dim currentCardNumer As Integer 
        currentCardNumer = SqlComm.ExecuteScalar()
        SqlComm.Dispose()
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mohongmao/archive/2008/12/26/3617852.aspx
9.使用注册表来创建odbc数据源
创建一个pp.reg注册表文件,添加如下
注册表(使用odbc的情况)
(1) 做安装程序的时候修改注册表数据源配置
(2) 程序中获取当前的文件路径(主要是.db文件和dbodbc6.dll,dbeng6.exe那个文件的路径)进行odbc配置
具体的注册表配置类似如下(用户数据源):
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\YYHIS]
"AutoStop"="YES"
"DatabaseFile"="D:\yyhis\jkc\DataBase\yyhis.db" //数据库文件
"Debug"="NO"
"DisableMultiRowFetch"="NO"
"Driver"="D:\yyhis\ASA\dbodbc6.dll" //odbc驱动
"Integrated"="NO"
"PWD"="sql"
"UID"="dba"
"Start"="D:\yyhis\ASA\dbeng6.exe -c 8m -Q" //隐藏启动

如果还要能让别人通过控制面板中的数据源来修改这个数据源
你还需要修改注册表,首先要注册该数据库odbc driver(这里是dbodbc.dll)类似于如下(注册为asa):
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\asa]
"driver"="D:\yyhis\ASA\dbodbc6.dll"
"setup"="D:\yyhis\ASA\dbodbc6.dll"
其次你要登记数据源
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources]
"yyhis"="asa"//asa就是上面注册的
这样子别人就可以通过控制面板中的数据源管理来修改
另外如果不是登记用户数据源改变一下YYHIS的位置(在第一个注册表配置中把HKEY_CURRENT_USER替换为HKEY_LOCAL_MACHINE)
还有你要吧你所用到的其它文件(比方系统的和自己写的一些动态连接库)
如果不在应用程序同一目录中,那么你就要为该应用app.exe指明一些路径
类似于下:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\app.exe]
@="d:\PROGRA~1\card\app.exe"
"path"="d:\program files\card\dll;d:\\PROGRA~1\card\asa"
10.vb.net 中也可以直接写注册表来实现如上功能
Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey
        key = Microsoft.Win32.Registry.CurrentUser  'key为HKEY_USERS根键
        subkey = key.CreateSubKey("Software\vb.net")  '在HKEY_USERS\software下创建一个vb.net子键
        subkey.SetValue("GOOD?", "of course") '在HKEY_USERS\software\vb.net下设置一个键值,键值名为good?,值为of course了
上面是在注册表里创建键了,下面我们用程序来访问我们刚创建的注册表的键吧:
             key = microsoft.Win32.Registry.CurrentUser  '如上
            subkey=key.OpenSubKey("software\vb.net",True) 'subkey即为HKEY_USERS\software\vb.net键
        dim value as object=subkey.GetValue("Good?") 'value为HKEY_USERS\software\vb.net键中的GOOD?的值
        msgbox(value.tostring()) '将出现of course了
上面是获取注册表键值了,要设值,还是用subkey.setvalue了
来讲讲删除吧:
        key.DeleteSubKey("software\vb.net")  '删除这个键了也可以用:
        key.DeleteSubKeyTree("software\vb.net")
还可以用key.GetSubKeyNames来遍历子键
即:for i=0 to ubound(key.GetSubKeyNames())
       subkey=key.OpenSubKey(key.GetSubKeyNames()(i),True)
.......  '对每个子键的处理
  next
用key.GetValueNames来遍历各个值
即:
   for i=0 to ubound(key.GetValueNames())
     key.GetValueNames()(i) '为每个值的名称
     value=key.Getvalue(key.GetValueNames()(i)) '为每个值的值
获取一个subkey
        subkey = key.OpenSubKey("Software\ODBC\ODBC.INI\ODBC Data Sources", permissionCheck)
11. 含odbc.net的程序在发布到客户机上后运行出现错误
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Data.Odbc, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.Data.Odbc, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
 
原因就是没有安装ODBC.NET
到microsoft的地址上下载来安装上就可以了。
参考了:odbc没有死
阅读(9423) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

greenhong2015-03-10 12:21:02

好文,收藏

我现在的ASP程序主要用ADODB来操作记录,想改成ADO.Net

请教一下大师,操作AS400,用ODBC.Net或者ADO.Net,哪个更快捷方便些?