• Access之C#连接Access


    如果是个人用的小程序的话。一般都推荐用Sqlite和Access

    使用SQlite数据库需要安装SQLite驱动,详情:SQLite之C#连接SQLite

    同样要使用Access数据库一必须安装Access驱动程序。驱动下载:http://pan.baidu.com/s/1moWje

    官网下载:http://www.microsoft.com/zh-cn/download/details.aspx?id=13255

    可以在收索你需要的版本。

    微软ADO.NET数据提供程序

    数据提供程序 命名空间 程序集
    OLE DB System.Data.OleDb System.Data.dll
    Microsoft SQL Server System.Data.SqlClient System.Data.dll
    Microsoft.SQL Server Mobile System.Data.SqlServerCe System.Data.SqlServerCe.dll
    ODBC System.Data.Odbc System.Data.dll

    没有特定的数据提供程序直接映射到Jet引擎(比如微软的Access数据库),如果要和Acces数据文件交互,可以使用OLE DB数据提供程序或者ODBC数据提供程序。

    由定义在System.Data.OleDb命名空间下的类组成的OLE DB 数据提供程序能让你访问所有支持基于传统COM的OLD DB协议的数据库,使用这个数据库提供程序,能非常简单地改变连接字符串中的“provider”,并能和各种OLE DB数据库进行通信。

    如果你安装了微软的office。那么也安装了Access数据库,现在我们来一步一步完成对Access数据库的访问

    打开Access数据库,选择创建数据库。选择保存路径和取名,单击创建即可

    然后的界面就很熟悉了

     单击 "单击以添加" 可以选择数据类型

    选择类型后。比如这里选择文本类型。就可以输入字段名称

    这里你会看到前面有一个默认的列ID。默认是主键。自增的。你可以选择当前列。在属性中看到,当然。你也可以改变当前字段的数据类型

    为了简化操作,我这里只创建3个字段用于测试

    字段名称 字段类型 字段说明
    name string 姓名
    age int 年龄
    crateDate DateTime 添加时间(默认值是当天)

    创建时间createDate需要设置默认值,选择createDate列,在属性部分。单击默认值。输入Now(),确定即可。还可以设置表达式格式。可以自己去看

    创建完成后。ctrl+s保存。输入表名称user,确定

    现在创建一个控制台程序。来连接Access

    添加引用:System.Data.dll,

    添加命名空间:using System.Data.OleDb;

     

    为了方便。把数据库拷贝到项目的Debug目录下面,编写测试代码

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Data.OleDb; //引入命名空间 需要添加引用 System.Data.dll
     6 
     7 namespace ConsoleApplication2
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             //连接Access字符串
    14             string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=userInfo.accdb;Persist Security Info=False";
    15 
    16             //插入数据
    17             string name = "张三";
    18             int age = 18;
    19 
    20             string sql = "insert into user(name,age)values(@name,@age)";
    21             OleDbParameter[] para = { 
    22                                         new OleDbParameter("@name",OleDbType.VarChar),
    23                                         new OleDbParameter("@age",OleDbType.Integer),
    24                                         /*
    25                                          * 我不知道这样写有什么区别,除了更简单还有什么好处
    26                                            new OleDbParameter("@age",age)
    27                                          */
    28                                     };
    29             para[0].Value = name;
    30             para[1].Value = age;
    31 
    32             int rows = 0;
    33 
    34             using (OleDbConnection connect = new OleDbConnection(conStr))
    35             {
    36                 using (OleDbCommand cmd = new OleDbCommand(sql, connect))
    37                 {
    38                     if (para != null && para.Length > 0) cmd.Parameters.AddRange(para);
    39 
    40                     if (connect.State == System.Data.ConnectionState.Closed) connect.Open();
    41 
    42                     rows = cmd.ExecuteNonQuery();
    43                 }
    44             }
    45 
    46             if (rows > 0) Console.WriteLine("插入成功");
    47             Console.ReadLine();
    48         }
    49     }
    50 }

    运行后提示错误:

    仔细看sql语句是不是没有错误的语法。再仔细想想呢?对,user是关键字,需要加用[]包裹。像这样:[user]

    string sql = "insert into [user](name,age)values(@name,@age)";

    修改后在运行,人品爆发的成功了

    是不是迫不及待的想看看Access数据库中是否真的插入成功呢?

    打开数据库界面。F5刷新试试

    当然,你可以可以编写sql查询

    右键:

    跟着一步一步下来是不是也没有想象中的那么难呢?其实什么都不难。只要你肯努力:)

    来看看链接字符串:

     //连接Access字符串
      string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=userInfo.accdb;Persist Security Info=False";

    这里的Microsoft.ACE.OLEDB.12.0,是连接Excel对象的接口引擎,与之对应的是:microsoft.jet.oledb.4.0

    那么问题来了:

    Microsoft.jet.oledb.4.0和Microsoft.ACE.OLEDB.12.0引擎有什么区别呢?

    共同点:都是做为连接Excel对象的接口引擎

    不同点:

    对于不同的Excel版本,有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。

    Jet 引擎,可以访问 Office 97-2003,但不能访问 Office 2007。

    ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。

    另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。

    所以,在使用不同版本的office时,要注意使用合适的引擎。

    我这里用的Access 2007,所以用的是ACE引擎

    Data Source=userInfo.accdb。这里访问的是相对路径。因为数据库放在了Debug下面,但我来自火星。我就偏偏不喜欢把数据库放到Debug下面。

    我想在项目中单独创建一个目录来存放数据库。那怎么办呢?好吧。程序员是伟大的。那你可以改路径,在项目下面创建一个db文件夹。把数据集拷贝到里面,结构图

     

    从图可以看出来,从Debug目录到db目录要退两次,那么不就是 “....” 。对吗?

    那立马改改看看效果:

    string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=....dbuserInfo.accdb;Persist Security Info=False";

    对与否。你自己去测试下。哈哈。

    记住:sql server中是可以拼接多条sql语句。然后一次性执行的。对吧,但Access是不行的。如果要执行多条sql语句。必须循环遍历。执行一条在执行下一条,直到海枯石烂。

    为了更好的维护。当然是首选把连接字符串配置到app.config中

    看看我已经配好了的

     1 <?xml version="1.0"?>
     2 <configuration>
     3   <configSections>
     4   </configSections>
     5   <connectionStrings>
     6     <add name="GoodManage.Properties.Settings.GMConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|GM.accdb" providerName="System.Data.OleDb" />
     7   </connectionStrings>
     8   <appSettings>
     9     <add key="accessCon" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=....dbGM.accdb;Persist Security Info=False" />
    10     <add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source=" />
    11     <add key="dbPath" value="....dbGM.accdb" />
    12     <add key="ClientSettingsProvider.ServiceUri" value="" />
    13   </appSettings>
    14   <startup>
    15     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    16   </startup>
    17   <system.web>
    18     <membership defaultProvider="ClientAuthenticationMembershipProvider">
    19       <providers>
    20         <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, 

    PublicKeyToken=31bf3856ad364e35"
    serviceUri="" /> 21 </providers> 22 </membership> 23 <roleManager defaultProvider="ClientRoleProvider" enabled="true"> 24 <providers> 25 <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" /> 26 </providers> 27 </roleManager> 28 </system.web> 29 </configuration>

    最后提供一个SQLHelper.cs  类

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Data.SqlClient;
      6 using System.Data;
      7 using System.Configuration;
      8 using System.Data.OleDb;
      9 using System.Web;
     10 namespace DAL
     11 {
     12     public class SQLHelper
     13     {
     14         //连接字符串
     15 
     16         static string connStr = ConfigurationManager.AppSettings["accessCon"];
     17       
     18 
     19         /// <summary>
     20         /// 返回受影响的行数
     21         /// </summary>
     22         /// <param name="comText"></param>
     23         /// <param name="param"></param>
     24         /// <returns></returns>
     25         public static int ExecuteNonQuery(string comText, params OleDbParameter[] param)
     26         {
     27             using (OleDbConnection conn = new OleDbConnection(connStr))
     28             {
     29                 using (OleDbCommand cmd = new OleDbCommand(comText, conn))
     30                 {
     31                     if (param != null && param.Length != 0)
     32                     {
     33                         cmd.Parameters.AddRange(param);
     34                     }
     35                     if (conn.State == ConnectionState.Closed)
     36                     {
     37                         conn.Open();
     38                     }
     39                     return cmd.ExecuteNonQuery();
     40                 }
     41             }
     42         }
     43         /// <summary>
     44         /// 返回数据对象
     45         /// </summary>
     46         /// <param name="comText"></param>
     47         /// <param name="param"></param>
     48         /// <returns></returns>
     49         public static object ExecuteScalar(string comText, params OleDbParameter[] param)
     50         {
     51             using (OleDbConnection conn = new OleDbConnection(connStr))
     52             {
     53                 using (OleDbCommand cmd = new OleDbCommand(comText, conn))
     54                 {
     55                     if (param != null && param.Length != 0)
     56                     {
     57                         cmd.Parameters.AddRange(param);
     58                     }
     59                     if (conn.State == ConnectionState.Closed)
     60                     {
     61                         conn.Open();
     62                     }
     63                     return cmd.ExecuteScalar();
     64                 }
     65             }
     66         }
     67         /// <summary>
     68         /// 返回table
     69         /// </summary>
     70         /// <param name="cmdText"></param>
     71         /// <param name="param"></param>
     72         /// <returns></returns>
     73         public static DataTable Adapter(string cmdText, params OleDbParameter[] param)
     74         {
     75             DataTable dt = new DataTable();
     76             //OleDbConnection con = new OleDbConnection();
     77             using (OleDbDataAdapter oda = new OleDbDataAdapter(cmdText, connStr))
     78             {
     79                 if (param != null && param.Length != 0)
     80                 {
     81                     oda.SelectCommand.Parameters.AddRange(param);
     82                 }
     83                 if (new OleDbConnection().State == ConnectionState.Closed)
     84                 {
     85                     new OleDbConnection(connStr).Open();
     86                 }
     87                 oda.Fill(dt);
     88             }
     89             return dt;
     90 
     91             /*
     92             using (SqlDataAdapter sda = new SqlDataAdapter(cmdText, connStr))
     93             {
     94                 if (param != null && param.Length != 0)
     95                 {
     96                     sda.SelectCommand.Parameters.AddRange(param);
     97                 }
     98                 sda.Fill(dt);
     99             }
    100             return dt;
    101              * */
    102         }
    103         /// <summary>
    104         /// 向前读取记录
    105         /// </summary>
    106         /// <param name="cmdText"></param>
    107         /// <param name="param"></param>
    108         /// <returns></returns>
    109         public static OleDbDataReader ExectueReader(string cmdText, params OleDbParameter[] param)
    110         {
    111             OleDbConnection conn = new OleDbConnection(connStr);
    112             using (OleDbCommand cmd = new OleDbCommand(cmdText, conn))
    113             {
    114                 if (param != null && param.Length != 0)
    115                 {
    116                     cmd.Parameters.AddRange(param);
    117                 }
    118                 if (conn.State == ConnectionState.Closed)
    119                 {
    120                     conn.Open();
    121                 }
    122                 return cmd.ExecuteReader(CommandBehavior.CloseConnection);
    123             }
    124         }
    125         /// <summary>
    126         /// 读取存储过程
    127         /// </summary>
    128         /// <param name="cmdText"></param>
    129         /// <param name="type"></param>
    130         /// <param name="param"></param>
    131         /// <returns></returns>
    132         public static DataTable GetPro(string cmdText, CommandType type, params OleDbParameter[] param)
    133         {
    134             DataTable dt = new DataTable();
    135             using (OleDbDataAdapter sda = new OleDbDataAdapter(cmdText, connStr))
    136             {
    137                 new OleDbCommand().CommandType = CommandType.StoredProcedure;
    138                 if (param != null && param.Length != 0)
    139                 {
    140                     sda.SelectCommand.Parameters.AddRange(param);
    141                 }
    142                 sda.Fill(dt);
    143             }
    144             return dt;
    145         }
    146     }
    147 }

    sqlite、Access都只要安全驱动就可以用数据库。那sql server是不是也可以 呢。答案是正确的。

    只要安装Microsoft SQL Server 2005 Express Edition,就可以使用sql数据库了

    当安装vs2010或其他版本,也就顺带的安装了express Edition

    Microsoft SQL Server 2005 Express Edition官网下载:

    http://www.microsoft.com/zh-cn/download/details.aspx?id=21844

    但要管理数据库就需要安装SQL Server Management Studio。

    在网上找到一片关于Express edition 开启远程连接的方法,我没尝试过。真的。我不骗你

    http://blog.csdn.net/xiongyilong/article/details/1925353

    转载于此:

    SQL Server 2005 Express 作为微软数据库的低端解决方案,在开发小型应用和WEB应用中有广泛的使用。但是SQL Server 2005 Exrpress在默认安装下只允许本机访问,如何启用网络访问功能就很有必要,现在我简单的介绍一下。

    1、 确 认成功安装SQL Server 2005 Express和 数据库服务已经启动。安装完成后,可以通过随SQL Server 2005 Express一同安装的工具 SQL Server Configuration Manager 查看数据库服务和其他的配置信息。

    上图显示数据库服务已经启用。

    2、 查 看SQL Server Express 2005 网络配置信息(SQL Server 2005 Network Configuration――> Protocols for SQLEXPRESS)。默认的情况下右边列表中的Named Pipes和TCP/IP的状态为Disable,即没有启用。右键点击这两项,在弹出菜单中选中Enable启用这两个协议,如下图。

    3、 在TCP/IP协议上双击鼠标,弹出对话框。修改对话框Protocol属性页中的“Listen All ”项设为“no”。IP Address属性页中,修改你要数据库服务监听的IP地址的属性,修改Enabled属性为Yes,修改TCP Dynamic Ports属性为空,TCP Port项在默认安装下为空,现在修改为我们监听端口1433。修改后的状态如下图所示;

    4、 启动管理工具

    ,管理界面如下所示:

    选中“Surface Area Configuration for Services and Connection”选项

    5、 改修改DATA Engine的Remote Connection属性,修改后的属性如下图所示:

    6、 完成以上操作后需要重新启动数据库服务才能使修改生效,下图的操作可以完成数据库服务的重启。

    7、 重启后,可以在命令窗口输入如下命令“netstat - na”命令查看服务器监听的所有端口,如果我们设备的1433端口正在监听,我们启用SQL Server 2005 Express网络操作成功。当然也可以使用telnet 命令来验证数据库操作是否成功。使用netstat命令操作如下图所示。

     好了。至此。完

  • 相关阅读:
    MySQL 之 数据操作
    MySQL 之 库操作,表操作
    Python之协程
    IO模式和IO多路复用
    python之线程
    Python--多线程、多进程常用概念
    计算机组成原理
    python基础-守护进程、守护线程、守护非守护并行
    win7旗舰版 安装IIS中出现的问题
    sql 2008数据事务日志已满处理方法
  • 原文地址:https://www.cnblogs.com/nsky/p/4488252.html
Copyright © 2020-2023  润新知