Access数据库从入门到进门——应用篇

          Access数据库自身提供了非常强大的VBA编程,可以很方便的开发小型软件,具体的使用方法请查阅相关资料。但是,对于我们而言,在软件开发过程中,都采用三层架构的开发方法,使用不同的编程语言,所以,遇到的功能性问题就会对于我们这种Access数据库的小白而言显得非常吃力。那么,我就结合最近项目开发(VB.net版)使用的Access数据库所用到的功能,进行一一的介绍。

连接Access数据库

        要使用Access数据库,我们首先要考虑的问题就是连接到Access数据库,我使用的是ADO对象,通过编写代码访问数据库,将数据库的连接语句写在配置文件里,所以代码如下所示:
<span style="font-size:18px;"><configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <connectionStrings>
    <add name="ConnString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Shoes.mdb;Jet OLEDB:DataBase Password=123456;Persist Security Info=False"/>
  </connectionStrings>
  <appSettings>
    <clear/>
    <add key="DBString" value="Access"/>
  </appSettings>
</configuration></span>
     

Provider=Microsoft.ACE.OLEDB.12.0

       有很多朋友查询连接数据库的语句使用的还是Provider=Microsoft.Jet.OLEDB.4.0,这个还是Access 03版本的启动,所以在连接的时候会出现这个错误。如图:
     Access数据库从入门到进门——应用篇_第1张图片
     
       现在,我们使用的Access数据库大多都是07版本以上的,遇到这种问题有两种解决办法,(1)如何你使用07版本以上建立的数据库,那么你会发现你的数据库类型为***.accdb。那么就将它另存为03版本的,也就是***.mdb.  (2)第二种解决办法就是如上面的第一版代码所示,使用Provider=Microsoft.ACE.OLEDB.12.0服务。微软的产品都是向下兼容,所以就都能用了。
       如果出现的错误是未在本地计算机上注册“Provider=Microsoft.ACE.OLEDB.12.0”提供程序。那么就需要下载一个服务支持程序。(点击这里下载)
     

 Jet OLEDB:DataBase Password=123

        这条语句是用来打开数据库所需要输入的密码的。众所周知,我们连接SQL Server时只需使用PassWord 或PWD都可以连接数据库,但是Access数据库会报出如图所示的错误。如图所示:
     Access数据库从入门到进门——应用篇_第2张图片
     
           Access数据库是不受保护的数据库,且指定的登陆和密码不是无密码的Admin。所以,对于设置密码的Access数据库要用到Windows的用户和组角色的设置的,以示安全。所以要使用Jet OLEDB:DataBase Password=123用于打开设置密码的数据库。

Persist Security Info=False

           ADO数据库连接中的Persist Security Info参数的作用,ADO我们经常使用,但是对其的了解还仅仅局限于一个数据库的连接,所以,对于ADO我们要更加深入的学习。而对于Persist Security Info属性的意思是表示是否保存安全信息,也就是可以理解为“ADO在数据库连接成功后是否保存密码信息”    True为保存,False为不保存,ADO缺省为True。我们可以测试下效果:

False
数据库连接前
       ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=yzs;Data Source=ydgl22;Persist Security Info=false"
数据库连接成功后
      ConnectString="Provider=MSDAORA.1;User ID=yzs;Data Source=ydgl22"
True
数据库连接前
ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=yzs;Data Source=ydgl22;Persist Security Info=true"
数据库连接成功后
ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=dlyx;Data Source=ydgl22"

          所以,如果数据库连接成功后不再需要连接密码,出于安全性的考虑,还是建议设为False,以防止后门程序取得数据库连接的密码。

使用Access数据库

         我在使用数据库的时候定义了一个SQLHelper,方便我们进行对数据库的增删改查,在这只提供部分给大家参考,和SQL Server版的略有区别,只不过是使用的服务不是一个而已。
代码如下:

<span style="font-size:18px;">'**********************************************   
' 文  件  名:SQLHelper   
' 命名空间:DAL   
' 内       容:数据库助手类
' 功       能:   
' 作       者:
' 小       组:
' 生成日期:2016/4/9 10:37:11   
' 版  本  号:V1.0.0.0   
' 修改日志:   
'********************************************** 
Imports System.Data
Imports System.Configuration
Imports System.Data.OleDb
Public Class SQLHelper
    Dim conn As OleDbConnection
    Dim cmd As New OleDbCommand
    Dim adapter As OleDbDataAdapter

    Private ReadOnly db As String = System.Configuration.ConfigurationManager.AppSettings("DBString")
    Private ReadOnly ConnectStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("ConnString").ToString
    Private connectString As String = ConnectStr
    Dim DBConnection As New OleDbConnection(connectString)

    '执行查询操作,有参数
    Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal oleParams As OleDbParameter()) As DataTable

        Dim adapter As OleDbDataAdapter
        Dim dt As New DataTable
        Dim ds As New DataSet

        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Connection = DBConnection
        cmd.Parameters.AddRange(oleParams)
        adapter = New OleDbDataAdapter(cmd)

        Try
            adapter.Fill(ds)
            dt = ds.Tables(0)
            cmd.Parameters.Clear()
        Catch ex As Exception
            Throw New Exception("查询失败!")
        Finally
            Call CloseCmd(cmd)
        End Try
        Return dt
    End Function


    '执行增删改,有参数
    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal oleParams As OleDbParameter()) As Integer
        '将传入的值,分别为cmd的属性赋值  
        cmd.Parameters.AddRange(oleParams)   '将参数传入  
        cmd.CommandType = cmdType            '设置一个值,解释cmdText  
        cmd.Connection = DBConnection                '设置连接,全局变量  
        cmd.CommandText = cmdText            '设置查询的语句  

        Try
            DBConnection.Open()                      '打开连接  
            Return cmd.ExecuteNonQuery()     '执行增删改操作  
            cmd.Parameters.Clear()           '清除参数  
        Catch ex As Exception
            Return 0                         '如果出错,返回0  
        Finally
            Call CloseConn(DBConnection)
            Call CloseCmd(cmd)
        End Try
    End Function


    Public Sub CloseCmd(ByVal cmd As OleDbCommand)

        If Not IsNothing(cmd) Then          '如果cmd命令存在  
            cmd.Dispose()                   '销毁  
            cmd = Nothing
        End If
    End Sub


    Public Sub CloseConn(ByVal conn As OleDbConnection)
        If (conn.State <> ConnectionState.Closed) Then  '如果没有关闭  
            conn.Close()                    '关闭连接  
            conn = Nothing                  '不指向原对象  
        End If
    End Sub

End Class</span>

使用了上面的SQLHelper后,在D层我们要对数据库进行操作就方便多了。
 
<span style="font-size:18px;">    Public Function UpdateUser(ByVal manager As Entity.ManagerEntity) As Integer
        Dim sqlhelper As New SQLHelper
        Dim cmdText As String
        Dim int As Integer
        Dim paras As OleDbParameter() = {New OleDbParameter("@PWD", manager.PWD),
                                         New OleDbParameter("@UserID", manager.UserID)}

        cmdText = "UPDATE T_userTable SET PWD=@PWD WHERE UserID=@UserID"
        int = sqlhelper.ExecAddDelUpdate(cmdText, CommandType.Text, paras)
        Return int
    End Function</span>

注意:之所以要将注意标红,说明确实很重要([]~( ̄▽ ̄)~*)。因为这点小问题的解决真的用了我很长时间。
     (1)注意参数的传递顺序,也就是你再SQL语句中先用哪个参数,如上面代码中的@PWD,那么,你就需要在定义的paras中,将@PWD放在第一的位置,将@UserID放在第二,这样才能将正确的数据存入数据库。不然,就会导致 SET PWD=@UserID的问题。即使你写的是SET PWD=@PWD。
      (2)注意在使用Access设计数据库的时候,密码的字段不要使用PassWord字段作为密码的字段。否则,你再D层添加用户的时候,根本就不会添加进去数据,而报出的错误是“INSERT INTO 语法错误 ”。这是由于在Access数据库中PassWord作为关键字。会将PassWord加密,而将数据库中字段改为PWD后,就可以插入进去了,具体的原理我也不太清楚是个什么情况。

总结:不断地出现问题才会一点点的加深对于未知事物的理解,让我们在错误中成长吧!

你可能感兴趣的:(Access数据库从入门到进门——应用篇)