当前位置: 代码迷 >> SQL >> visual basic + SQL Server ADO 简要实例 通讯录
  详细解决方案

visual basic + SQL Server ADO 简要实例 通讯录

热度:412   发布时间:2016-05-05 14:13:17.0
visual basic + SQL Server ADO 精简实例 通讯录

之所以选择vb+SQLServer这种搭配因为,vb相较于vc在数据库方面其实更有优势,而access基本已成教学工具,你去网上搜索相关教程发现千篇一律的vb与access搭配,而且他们有同一个理由——为方便学习,对此我只想说你抄你妹我擦你大爷,vb与sqlserver的搭配虽理论完全可行且很占优势,但至今很少有相关入门教程,笔者在这上面也耗费了不少青春,笔者认为这种搭配对新手而言是比较容易上手的,也是比较实用的,这里精简一下,给个入门的例子

这篇不是什么研究,老鸟可以直接跳过去了。。。

一、预备知识:

sql server 数据类型

int允许从 -2,147,483,648 到 2,147,483,647 的所有数字。

text可变长度的字符串。最多 2GB 字符数据。

nchar(n)固定长度的 Unicode 数据。最多 4,000 个字符。

char(n)固定长度的字符串。最多 8,000 个字符。
text可变长度的字符串。最多 2GB 字符数据。
ntext可变长度的 Unicode 数据。最多 2GB 字符数据。

ado三要素:

ADO主要包括Connection,Recordset和Command三个对象,   它们的主要功能如下:   
·Connection对象:负责打开或连接数据库文件;   
·Recordset对象:存取数据库的内容;   
·Command对象:对数据库下达行动查询指令,以及执行SQL   Server的存储过程。

二、实现步骤:

1 在SQLServer中建立通讯录单表数据库,结构(我随手写的,可自行更改)如下:


2 建立vb标准工程,窗体更名为“通讯录”。

引入datagird控件和ado引用,具体操作进“工程”->"部件“,"工程"->"引用"

这里datagird控件id为ml

初次把玩数据库的时候可能最纠结的就是连接问题了,学过c++的都知道文件操作不外乎读写,其实数据库是一样的,只不过这里引入了ADO对象,起了一个解耦合的作用,用一个中间项与数据同步,但操作起来要方便的多,这类似于java中的java bean,这就是下面我们要碰到的

定义全局变量:

Dim gSet As New ADODB.RecordsetDim gConn As New ADODB.Connection

recordset是每张表中数据的集合,connection顾名思义囊括连接工作,下面我们从实践中体会体会他们的用法

下面在Form_Load()中插入代码

连接只要一句:

gConn.Open "Provider=SQLOLEDB.1;integrated Security=SSPI;Persist Security Info=False; Initial Catalog=fup;Data Source=(local)"

这句话有极大的信息量,包含使用SQLServer驱动,安全策略,fup为数据库名,Data Source = (local) 意指使用本地数据库。这一句其实相当于dobc中创建、引入数据源等过程,可见ado的移植性显然要强于odbc。

换成以前,笔者可能会仔细追究各个变量名、常量名、类型名的含义,现在认为这些实在是浪费时间,现在的IT界已经高度模块化,我们是工科生,主要负责使用这些技术,这些模块是更底层的技术人员提供的,而我们又给我们的上一层扮演解耦合的角色,这样产业链才更加高效,在这里我们要用函数的思想,即只要知道数据库驱动、数据库名,我们就可以唯一的连接一个数据库。

接下来是数据读入视图:

Dim strsql As Stringstrsql = "select * from maillist"gSet.CursorLocation = adUseClientgSet.LockType = adLockOptimisticgSet.Open strsql, gConnSet ml.DataSource = gSet

gSet.CursorLocation = adUseClient
gSet.LockType = adLockOptimistic

老实说这两句我也没搞懂,不过测试表明是必须的,我也不想深究了,原因同上,开发环境上的纠结浪费时间,我还没立志从事这一领域

这里主要是sql的语言基础,没啥好说的

gSet便是select语句查询结果的集合,最后一句将这个集合作为datagird控件的数据源,运行程序自动显示

为视觉方便,请添加以下字段长度控制语句,11个字段

ml.Columns(0).Width = 1000ml.Columns(1).Width = 1200ml.Columns(2).Width = 1000ml.Columns(3).Width = 1700ml.Columns(4).Width = 1200ml.Columns(5).Width = 2000ml.Columns(6).Width = 2400ml.Columns(7).Width = 1000ml.Columns(8).Width = 1200ml.Columns(9).Width = 800ml.Columns(10).Width = 600

程序结尾在Form_Unload中接触连接不解释

Private Sub Form_Unload(Cancel As Integer)Set ml.DataSource = NothinggSet.UpdategSet.ClosegConn.CloseEnd Sub

下面是一系列增删改查的操作

为减少不必要的时间消耗,文本框只选择性显示两个字段属性

Private Sub Command1_Click()gSet.AddNew Array("姓名", "编号"), Array(friendname.Text, id.Text) '增加记录,显然通过函数转换为insert into即可End SubPrivate Sub Command2_Click()gSet.Delete '删除当前记录End SubPrivate Sub Command3_Click()gSet!姓名 = friendname.Text '修改gSet中的值,gSet是跟数据库同步的,此处改动直接导致数据库中数据改动,函数转换成update语句的gSet!编号 = id.TextEnd SubPrivate Sub Command4_Click()Set ml.DataSource = NothinggSet.CloseDim strsql As Stringstrsql = "select * from maillist where 姓名 like '%" & friendname.Text & "%'" '查询语句,sql基础不解释gSet.Open strsql, gConnSet ml.DataSource = gSetEnd Sub


ADO访问数据库的时候,关于SQL的知识不是必要的,操作更加直观,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。而在ODBC中,你几乎可以不写一行代码就实现查看,

到这里读者应该发现,开发环境的适应其实很简单,各个系统大同小异,就跟国美电器苏宁电器一样,名字不一样,东西买过来,主干都差不多,到最后,我们要提高的,仍是面向复杂数据库的逻辑思维能力、程序语言基础和编码技巧、sql本身语言基础等等

最终效果图:



附上整体源码:

Dim gSet As New ADODB.RecordsetDim gConn As New ADODB.ConnectionPrivate Sub Command1_Click()gSet.AddNew Array("姓名", "编号"), Array(friendname.Text, id.Text) '增加记录,显然通过函数转换为insert into即可End SubPrivate Sub Command2_Click()gSet.Delete '删除当前记录End SubPrivate Sub Command3_Click()gSet!姓名 = friendname.Text '修改gSet中的值,gSet是跟数据库同步的,此处改动直接导致数据库中数据改动,函数转换成update语句的gSet!编号 = id.TextEnd SubPrivate Sub Command4_Click()Set ml.DataSource = NothinggSet.CloseDim strsql As Stringstrsql = "select * from maillist where 姓名 like '%" & friendname.Text & "%'" '查询语句,sql基础不解释gSet.Open strsql, gConnSet ml.DataSource = gSetEnd SubPrivate Sub Form_Load()gConn.Open "Provider=SQLOLEDB.1;integrated Security=SSPI;Persist Security Info=False; Initial Catalog=fup;Data Source=(local)"Dim strsql As Stringstrsql = "select * from maillist"gSet.CursorLocation = adUseClientgSet.LockType = adLockOptimisticgSet.Open strsql, gConnSet ml.DataSource = gSetml.Columns(0).Width = 1000ml.Columns(1).Width = 1200ml.Columns(2).Width = 1000ml.Columns(3).Width = 1700ml.Columns(4).Width = 1200ml.Columns(5).Width = 2000ml.Columns(6).Width = 2400ml.Columns(7).Width = 1000ml.Columns(8).Width = 1200ml.Columns(9).Width = 800ml.Columns(10).Width = 600End SubPrivate Sub Form_Unload(Cancel As Integer)Set ml.DataSource = NothinggSet.UpdategSet.ClosegConn.CloseEnd SubPrivate Sub ml_RowColChange(LastRow As Variant, ByVal LastCol As Integer)friendname.Text = gSet!姓名id.Text = gSet!编号End Sub

  相关解决方案