19.3 连接数据库

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

​​​​​​​需要北风数据库的请留言自己的信箱。

连接数据库使用OleDbConnection(数据连接)类,它表示到数据源的连接。它的某些方法或属性可能不可用,这取决于本机OLE DB提供程序所支持的功能。

OleDbConnection常用属性

  1. ConnectionString:用于打开数据库的字符串。
  2. ConnectionTimeout:获取连接超时时间(以秒为单位)。
  3. Database:获取当前数据库或连接打开后要使用的数据库的名称。
  4. DataSource:获取数据源的服务器名或文件名。
  5. Provider:获取在连接字符串的“Provider=”子句中指定的OLEDB提供程序的名称。
  6. ServerVersion:获取一个包含客户端所连接到的服务器的版本的字符串。
  7. State:获取连接的当前状态。这是一个ConnectionState枚举,常用以下成员:
  1. Open:连接处于打开状态。
  2. Closed:连接处于关闭状态。
  3. Connecting:连接对象正在与数据源连接。

OleDbConnection常用方法:

  1. Open:使用ConnectionString所指定的属性设置打开数据库连接。
  2. OpenAsync:Open的异步版本。
  3. Close:关闭到数据源的连接。
  4. ChangeDatabase:为打开的OleDbConnection更改当前数据库。
  5. CreateCommand:创建并返回一个与该OleDbConnection关联的OleDbCommand对象。
  6. GetOleDbSchemaTable:应用了指定的限制之后,按照GUID的指示从数据源返回架构信息。
  7. GetSchema:返回OleDbConnection的数据源的架构信息。
  8. ResetState:更新 OleDbConnection 对象的 State 属性。

OleDbConnection常用事件:

  1. StateChange:当连接状态更改时发生。

19.3.1 连接字符串

连接Mdb数据库使用的ConnectionString提供了建立初始连接所必需的数据源名称和其他参数。通常情况下,ConnectionString由多个键值对组成,每个键值对之间用;(英文分号)隔开。

开发32位程序时,ConnectionString的写法:

  1. Provider = Microsoft.Jet.OLEDB.4.0;data source=数据库路径;

如果开发32位程序时,使用的mdb数据库设置了密码:

  1. Provider = Microsoft.Jet.OLEDB.4.0;data source=数据库路径;jet oledb:database password=密码;

开发64位程序时,ConnectionString的写法:

  1. Provider=Microsoft.ACE.OLEDB.12.0;data source=数据库路径;

如果开发64位程序时,使用的mdb数据库设置了密码:

  1. Provider=Microsoft.ACE.OLEDB.12.0;Data Source=数据库路径;jet oledb:database password=密码;

注意:关于如何切换32位程序和64位程序开发,请参看第13.3节。

如果需要安装Microsoft Access 2016 数据库引擎可再发行程序包,可以从这里下载:

https://www.microsoft.com/zh-cn/download/details.aspx?id=54920

点击下载,会弹出64位安装包和32位安装包,请根据实际需要选择下载。

【例 19.1【项目:code19-001】连接与关闭数据库。

        OleDbConnection conn;

        private void button1_Click(object sender, EventArgs e)

        {

            conn = new OleDbConnection();

            //32位,无密码

            conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=C:\\lessons\\Northwind.mdb;";

            //32位,有密码

            //conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=C:\\lessons\\Northwind.mdb;jet oledb:database password=123456;";

            //64位,无密码

            //conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\\lessons\\Northwind1.mdb;";

            //64位,有密码

            //conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\lessons\\Northwind.mdb;jet oledb:database password=123456;";

            conn.Open();

            label1.Text = getConnState(conn.State);

        }

        private void button2_Click(object sender, EventArgs e)

        {

            conn.Close();

            label1.Text = getConnState(conn.State);

        }

        private string getConnState(ConnectionState state)

        {

            switch(state)

            {

                case ConnectionState.Open:

                    return "打开数据库";

                case ConnectionState.Closed:

                    return "已经关闭数据库";

                case ConnectionState.Connecting:

                    return "正在连接数据库";

            default:

                    return "其它状态";

            }           

        }

运行结果如下图所示:

图19-19 打开数据库

19.3.2 状态改变事件

OleDbConnection的连接状态改变时会触发StateChange事件。利用该事件提供的参数e,可以获得原连接状态和现连接状态。

【例 19.2【项目:code19-002】连接与关闭数据库。

        OleDbConnection conn;

        private void Form1_Load(object sender, EventArgs e)

        {

            conn = new OleDbConnection();

            conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=C:\\lessons\\Northwind.mdb;";

            conn.StateChange += connStateChange;

        }

        private void btnOpen_Click(object sender, EventArgs e)

        {

            conn.Open();

        }

        private void btnInfo_Click(object sender, EventArgs e)

        {

            TextBox1.Text += "DataSource:" + conn.DataSource + "\r\n";

            TextBox1.Text += "ServerVersion:" + conn.ServerVersion + "\r\n";

            TextBox1.Text += "Provider:" + conn.Provider + "\r\n";

        }

        private void connStateChange(object sender, StateChangeEventArgs e)

        {

            TextBox1.Text += "数据库由 " + getConnState(e.OriginalState) + " 变更为:" + getConnState(e.CurrentState) + "\r\n";

        }       

        private void btnClose_Click(object sender, EventArgs e)

        {

            conn.Close();

        }

        private string getConnState(ConnectionState state)

        {

            switch (state)

            {

                case ConnectionState.Open:

                    return "打开数据库";

                case ConnectionState.Closed:

                    return "已经关闭数据库";

                case ConnectionState.Connecting:

                    return "正在连接数据库";

                default:

                    return "其它状态";

            }

        }

运行结果如下图所示:

图19-20 获得连接信息

19.3.3 数据库的架构表

通过OleDbConnection类的GetOleDbSchemaTable方法可以获得数据库架构,GetOleDbSchemaTable具体语法:

public DataTable GetOleDbSchemaTable( Guid schema, Object[] restrictions )

参数说明:

  1. schema:指定需要返回的架构表类型。这是一个OleDbSchemaGuid类,提供了多个静态成员指示架构表类型,常用的成员有:
    1. Columns:返回在目录中定义的表(包括视图)的列。
    2. Tables:返回在目录中定义的表(包括视图)。
    3. Table_Constraints:返回在目录中定义的由给定用户拥有的表约束。
  2. restrictions:限制值的 Object 数组。 这些值按照限制列的顺序来应用。 即,第一个限制值应用于第一个限制列,第二个限制值应用于第二个限制列,依此类推。

返回值:

  1. 所请求的架构信息,这是一个DataTabl类型,在后面章节会做讲解。

【例 19.3【项目:code19-003】返回数据库中的表。

        OleDbConnection conn;

        private void Form1_Load(object sender, EventArgs e)

        {

            conn = new OleDbConnection();

            conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=C:\\lessons\\Northwind.mdb;";

        }

        private void button1_Click(object sender, EventArgs e)

        {

            conn.Open();

            DataTable dt;

            dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

          

            //将dataGridView1的数据源设置为dt,自动显示dt中的内容

            dataGridView1.DataSource = dt;

            conn.Close();

        }

运行结果如下图所示:

图19-21 获得数据库中的表和视图信息

以上代码获得了数据库中的自定义表、系统表、视图,如果只需要获得自定义表,可以设置GetOleDbSchemaTable的第二个参数来进行过滤,修改后的代码:

dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE"});

运行结果如下图所示:

图19-22 获得数据库中的自定义表信息

【例 19.4【项目:code19-004】获得数据库中的所有架构信息。

        OleDbConnection conn;

        private void Form1_Load(object sender, EventArgs e)

        {

            conn = new OleDbConnection();

            conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=C:\\lessons\\Northwind.mdb;";

            Type OleDbSchemaGuidType = typeof(OleDbSchemaGuid);

            foreach(System.Reflection.MemberInfo OleDbSchemaGuidType_Member in OleDbSchemaGuidType.GetMembers())

            {

                if( OleDbSchemaGuidType_Member.MemberType == System.Reflection.MemberTypes.Field )

                    comboBox1.Items.Add(OleDbSchemaGuidType_Member.Name);

            }

            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

            conn.Open();

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            DataTable dt;

            try

            {

                Type OleDbSchemaGuidType = typeof(OleDbSchemaGuid);

                dt = conn.GetOleDbSchemaTable((Guid)OleDbSchemaGuidType.InvokeMember(comboBox1.Text, System.Reflection.BindingFlags.GetField, null, null, null), null);

                DataGridView1.DataSource = dt;

            }

            catch( Exception ex)

            {

                MessageBox.Show("发生错误:" + ex.Message);

            }

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        {

            conn.Close();

        }

运行结果如下图所示:

图19-23 获得数据库Columns的架构信息

注意:并不是所有的架构信息都支持mdb数据库,所以必须在代码中设置Try……Catch语句,防止错误发生导致程序崩溃。

19.3.4 连接Excel

Excel文件也可以视为一个数据库,里面的Sheet表相当于一个数据表。

操作Excel文件,还是使用System.Data.OleDb 命名空间的OleDbConnection类。

OleDbConnection连接字符串和安装的Office版本有较大关系。

笔者分别在两台安装32位和64 Office2010的电脑上实测的情况:

安装的不论是32位还是64Office2010,都请使用以下连接字符串:

Provider = Microsoft.ACE.OLEDB.12.0;data source=Excel文件;Extended Properties='Excel 12.0 XML;HDR=YES;

但是开发时应注意:如果安装的是32Office2010,那么开发的程序只能编译为32位;如果安装的是64Office2010开发的程序可以编译为32位或64位:

如果是安装的2003版的Office,请使用以下连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source= Excel文件;Extended Properties=‘Excel 8.0; HDR=YES;'

其中HDR表示第一行是否是标题行。如果第一行是标题行(即字段名称),那么应设置为YES;如果第一行是数据,则请设置为NO。

注意:有的教程说后缀.xlsx文件用第一种连接字符串,xls文件用第二种连接字符串,这是不正确的。

19.3.5 连接MsSql

操作MsSql数据库,应使用System.Data.SqlClient命名空间的SqlConnection类

常见的连接字符串:

1、使用当前的Windows账户进行验证:

Data Source=xxx.xxx.xxx.xxx\实例名;Initial Catalog=NorthWind;Integrated Security=True;

Data Source=(local) \实例名;Initial Catalog=NorthWind;Integrated Security=True;

Data Source=服务器名称\实例名;Initial Catalog=NorthWind;Integrated Security=True;

其中,Data Source可以替换为Server或者Address或者Addr或者Network Address。

Integrated Security设置为True,表示使用当前的Windows账户进行验证,否则应该使用MsSql的用户账户验证。

2、使用MsSql的用户账户验证:

Data Source= xxx.xxx.xxx.xxx\实例名;Initial Catalog=NorthWind;User ID=sa;Password=sa123456;

通常不建议将用户名和密码写在连接字符串内,可以在程序连接数据库时由用户输入账户名和密码,再将账户名和密码传给连接字符串。

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/69633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv11实时目标检测 | 摄像头视频图片文件检测

在上篇文章中YOLO11环境部署 || 从检测到训练https://blog.csdn.net/2301_79442295/article/details/145414103#comments_36164492,我们详细探讨了YOLO11的部署以及推理训练,但是评论区的观众老爷就说了:“博主博主,你这个只能推理…

JavaEE架构

一.架构选型 1.VM架构 VM架构通常指的是虚拟机(Virtual Machine)的架构。虚拟机是一种软件实现的计算机系统,它模拟了物理计算机的功能,允许在单一物理硬件上运行多个操作系统实例。虚拟机架构主要包括以下几个关键组件&#xff…

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…

如何在Linux中设置定时任务(cron)

在Linux系统中,定时任务是自动执行任务的一种非常方便的方式,常常用于定期备份数据、更新系统或清理日志文件等操作。cron是Linux下最常用的定时任务管理工具,它允许用户根据设定的时间间隔自动执行脚本和命令。在本文中,我们将详…

【MySQL】我在广州学Mysql 系列—— 数据备份与还原

ℹ️大家好,我是练小杰,今天周一,过两天就是元宵节了,今年元宵节各位又要怎么过呢!! 本文主要对Mysql数据库中的数据备份与还原内容进行讨论!! 回顾:👉【MySQ…

【redis】数据类型之hash

Redis中的Hash数据类型是一种用于存储键值对集合的数据结构。与Redis的String类型不同,Hash类型允许你将多个字段(field)和值(value)存储在一个单独的key下,从而避免了将多个相关数据存储为多个独立的key。…

SpringBoot+Dubbo+zookeeper 急速入门案例

项目目录结构&#xff1a; 第一步&#xff1a;创建一个SpringBoot项目&#xff0c;这里选择Maven项目或者Spring Initializer都可以&#xff0c;这里创建了一个Maven项目&#xff08;SpringBoot-Dubbo&#xff09;&#xff0c;pom.xml文件如下&#xff1a; <?xml versio…

游戏引擎学习第96天

讨论了优化和速度问题&#xff0c;以便简化调试过程 节目以一个有趣的类比开始&#xff0c;提到就像某些高端餐厅那样&#xff0c;菜单上充满了听起来陌生或不太清楚的描述&#xff0c;需要依靠服务员进一步解释。虽然这听起来有些奇怪&#xff0c;但实际上&#xff0c;它反映…

【分布式理论9】分布式协同:分布式系统进程互斥与互斥算法

文章目录 一、互斥问题及分布式系统的特性二、分布式互斥算法1. 集中互斥算法调用流程优缺点 2. 基于许可的互斥算法&#xff08;Lamport 算法&#xff09;调用流程优缺点 3. 令牌环互斥算法调用流程优缺点 三、三种算法对比 在分布式系统中&#xff0c;多个应用服务可能会同时…

安宝特方案 | AR助力制造业安全巡检智能化革命!

引言&#xff1a; 在制造业中&#xff0c;传统巡检常面临流程繁琐、质量波动、数据难以追溯等问题。安宝特AR工作流程标准化解决方案&#xff0c;通过增强现实AR技术&#xff0c;重塑制造业安全巡检模式&#xff0c;以标准化作业流程为核心&#xff0c;全面提升效率、质量与…

科技查新过不了怎么办

“科技查新过不了怎么办&#xff1f;” “科技查新不通过的原因是什么&#xff1f;” 想必这些问题一直困扰着各位科研和学术的朋友们&#xff0c;尤其是对于查新经验不够多的小伙伴&#xff0c;在历经千难万险&#xff0c;从选择查新机构、填写线上委托单到付费&#xff0c;…

【AI时代】Page Assist - 本地 AI 模型的 Web UI (谷歌浏览器) 本地DeepSeek启用联网功能

Page Assist - 本地 AI 模型的 Web UI 一、部署本地模型 参考教程&#xff1a;https://blog.csdn.net/Bjxhub/article/details/145536134二、安装插件 Page Assist 浏览器谷歌商店搜索 Page Assist &#xff0c;安装该插件。 注意&#xff1a;需要一点科学的魔法。 三、使用…

collabora online+nextcloud+mariadb在线文档协助

1、环境 龙蜥os 8.9 docker 2、安装docker dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i shttps://download.docker.comhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.…

Spring MVC 拦截器(Interceptor)与过滤器(Filter)的区别?

1、两者概述 拦截器&#xff08;Interceptor&#xff09;&#xff1a; 只会拦截那些被 Controller 或 RestController 标注的类中的方法处理的请求&#xff0c;也就是那些由 Spring MVC 调度的请求。过滤器&#xff08;Filter&#xff09;&#xff1a; 会拦截所有类型的 HTTP …

SQL Server 逻辑查询处理阶段及其处理顺序

在 SQL Server 中&#xff0c;查询的执行并不是按照我们编写的 SQL 语句的顺序进行的。相反&#xff0c;SQL Server 有自己的一套逻辑处理顺序&#xff0c;这个顺序决定了查询的执行方式和结果集的生成。了解这些处理阶段和顺序对于优化查询性能和调试复杂查询非常重要。 SQL …

二、通义灵码插件保姆级教学-IDEA(使用篇)

一、IntelliJ IDEA 中使用指南 1.1、代码解释 选择需要解释的代码 —> 右键 —> 通义灵码 —> 解释代码 解释代码很详细&#xff0c;感觉很强大有木有&#xff0c;关键还会生成流程图&#xff0c;对程序员理解业务非常有帮忙&#xff0c;基本能做到哪里不懂点哪里。…

Java 大视界 -- 5G 与 Java 大数据融合的行业应用与发展趋势(82)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

四、自然语言处理_08Transformer翻译任务案例

0、前言 在Seq2Seq模型的学习过程中&#xff0c;做过一个文本翻译任务案例&#xff0c;多轮训练后&#xff0c;效果还算能看 Transformer作为NLP领域的扛把子&#xff0c;对于此类任务的处理会更为强大&#xff0c;下面将以基于Transformer模型来重新处理此任务&#xff0c;看…

深入探索JavaCV:功能强大的Java计算机视觉库

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

新一代高性能无线传输模块M-GATEWAY3

M-GATEWAY3是M3系列的通用接口模块&#xff0c;用于接收各种总线信号并将它们集成到一个系统中。该模块通过标准化传输协议XCPonETH进行输出&#xff0c;确保为各种测量应用提供无损信号。此外&#xff0c;M-GATEWAY3支持通过热点、ETH-PC或USB-C传输数据。借助M-GATEWAY3&…