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,这就是下面我们要碰到的
定义全局变量:
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