vb.net连接access数据库问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net连接access数据库问题相关的知识,希望对你有一定的参考价值。

在添加数据前怎么判断数据库中是否已存在该数据(如:字段编号已有 100 存在,我再添加一个100 时 要提示数据已存在)

1,使用ADO connection对象 

    首先,要建立ADO引用,定义connection这个类,然后实例化对象。

代码完成如下:

        <span style="font-size:18px;">Dim objCn As New Connection, objRs As New Recordset        
     objCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;" & "Data Source=" & App.Path & "\\实例01.mdb"
     objCn.Open  
</span>

 

 2,使用ODBC数据源

    首先,打开电脑上的ODBC数据源,建立关系。

步骤如下:

    1),打开电脑上的ODBC数据源

    如下图所示:

                 

2)点击添加

3)命名

4)和数据库源建立关系

5)用代码实现连接

<span style="font-size:18px;">       
    dim objCn As Connection  
  Set objCn = New Connection  
  objCn.Open "DSN=实例2DSN"  
</span>

         

3、ADO Data 控件创建连接

    1)右击data控件,选择ADODC属性

     2)从三种连接资源中选择一种。 

    使用data Link 文件:直接点击浏览,找到包含连接字符串的.udl文件即可

    使用ODBC数据源连接,单击新建

 

选择用户数据库,之后的操作跟2中步骤一样。 

    使用连接字符串:单击生成


测试连接

 

4、使用数据环境设计器创建数据库连接

    添加引用

 

右击创建连接,在右击想要连接的属性,之后的操作跟data控件中使用字符串中的操作一致

参考技术A 你这个问题要分三步:
第一步,先查询,用SQL的
SELECT * FROM 数据库表 WHERE 字段编号=100

第二步,判断返回的数据库的记录数
第三步,根据返回的记录数进行对应的处理

如果记录数超过0,提示数据已存在
如果等于0.执行添加任务追问

能不能给个例子参考下

追答

你的问题是:在添加数据前怎么判断数据库中是否已存在该数据(如:字段编号已有 100 存在,我再添加一个100 时 要提示数据已存在)

我已经按照你的要求解答完毕,如果觉得对你有用,请采纳。

本回答被提问者和网友采纳
参考技术B '1、 新建模块
Module Module1

Public ADOConn As New ADODB.Connection
Public Adors As New ADODB.Recordset

End Module

'2、 引用
'引用adodb 7.0.3300.0

'3、 模块函数
连接函数:
Public Function LinkDatabase(ByVal AppPath As String) As String
LinkDatabase = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & AppPath & "\Database.mdb;Persist Security Info=False;Jet OLEDB:Database Password=111111"
End Function

'4、 OK_Click确定登录事件
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
'测试用户名及密码是否有效
ADOConn.ConnectionString = LinkDatabase(System.Environment.CurrentDirectory) '参数为当前目录位置
ADOConn.CommandTimeout = 10
ADOConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
ADOConn.Open()
Adors.Open("select * from Tables where 姓名='" & Trim(UsernameTextBox.Text) & "' and 密码='" & PasswordTextBox.Text & "'", ADOConn)
If Adors.RecordCount > 0 Then
ADOConn.Close()
MDIParent1.Show()
Me.Hide()
Else
ADOConn.Close()
MsgBox("错误:" & vbCrlf & vbCrlf & "无效用户名或密码,禁止用户登录.", MsgBoxStyle.Critical, "Error")
PasswordTextBox.Text = ""
PasswordTextBox.Focus()
End If
End Sub

'当然Adors.Open("……",ADOConn)表示查询,结果是不允许修改的,要修改必需加参数:Adors.Open("……", ADOConn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

VB.NET连接access数据库文件时提示“无效的授权说明”

如题,我知道用代码可以连接,请不要让我用代码,我就是搞不明白为什么用dataAdapter控件新建连接时 提示“无效授权说明”,网上不少人提出这个问题,貌似没有解决的!希望知道的给出答案!
问题截图地址 http://wotoo.go.51.net/1.jpg

数据库与文本文件返回数据的方法不同.如果把文本文件比作一个Textbox 的话,那么数据库更像是一个ListBox.使用文本文件时我们需要从整个Textbox中取出有用的信息,并进行处理,而Listbox则可以根据需要返回特定的某一项.

由于VB本身并不带有可以访问数据库的类,所以我们需要引用一个包含能访问数据库的类来使用数据库.这里我们采用ADODB,相比DAO和能访问数据库的API来说,它比DAO更灵活,更强大;而比起API,它更简单易用,更适合初学者.而Access数据库比起SQL,也相对简单了很多,且能够满足中小型应用程序的需要,所以我们在使用数据库时,选择了Access.

就像使用文本文件来存储数据一样,我们需要先设计好数据结构,只不过在设计Access数据库的结构时,我们需要用到其它的程序来进行详细的规划.建议采用的程序是office中的Access或VB自带的VISDATA.

当数据库设计好了以后,我们可以开始"数据库编程"了.

首先,我们需要引用ADO.具体的方法是,在"工程" -- "引用" 中,找到"Microsoft ActiveX Data Object *.* Library",这里的"*.*"是指的时ADO的版本号,一般来说,应用程序或ActiveX控件都具有向下兼容性,所以我们尽可能选择比较新的版本.以确保程序在能识别旧版本Access的同时,也能识别较新版本的Access.

然后我们需要在程序中创建一个对象.就好比我们在窗体上添加一个FileBox才能看到文件名一样,只有创建了ADO对象,我们才能够访问数据库.常用的对象有两个,Connection和Recordset.

创建这两个对象的具体方法是:

1.在引用后,使用New关键字,如
Private Conn As New ADODB.Connection
Private Reco As New ADODB.Recordset

2.在没引用时,用CreateObject创建对象:
Dim Conn,Reco
Set Conn = CreateObject("ADODB.Connection")
Set Reco = CreateObject("ADODB.Recordset")

创建了对象之后,下一步我们要做的就是打开数据库了.

先看下面的代码,可以成功的打开数据库.
Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Main.mdb"
这句代码打开了D盘中的Main.mdb这个数据库.
Connection.Open方法的第一个参数是连接代码,它将传递给系统的数据库引擎.前半部分"Provider=Microsoft.Jet.OLEDB.4.0",它表示了数据库的类型.不同的数据库可能会不同.后半句"Source=d:\main.mdb"它表示了数据库所在的绝对路径.

打开数据库之后,还要打开表.假如数据库中有一个表,表名为"Users",字段有两个,一个为用户名,一个为密码.那么看以下代码.

1.想返回"Users"中,[用户名]为"去年烟花"的[密码]
Recordset.open "Select 密码 From Users Where 用户名='去年烟花'",Connection,1,1

之后我们就可以把用户输入的密码进行比较,看是否允许登录.
If Recordset.eof and Recordset.bof then
Msgbox "用户不存在!",16
Else
If PassWord =Recordset("密码").value then
msgbox "登录成功!",64
Else
msgbox "密码错误!",32
End If
End If
Recordset.Close

2.假设Admin已经成功登录系统,我们想把所有的用户名和密码都显示出来
Recordset.open "Select * From Users",Connection,1,1
这时,表已经被打开,我们就用以下代码把它显示出来.
Do whlie Not Recordset.eof
Print "用户名: " & Recordset("用户名").value & "密码: " & Recordset("密码").value
Recordset.MoveNext
Loop
Recordset.Close

由以上代码示例可以看出,打开表时,可以只打开其中的一个字段,也可以打开所有.第一个参数是SQL语句.

Select [字段名] From 表名 [Where 条件]

这里的条件可以省略.且字段名也可以用"*"来代替所有字段.

需要注意的是,如果你用(1)中的方法打开,那么(2)后面显示的代码就不能再用在(1)中.因为(1)里并没有打开[用户名]字段,所以这一句Recordset("密码")就没有值存在,还有可能出错.

后面的条件,可以用"="、">"、"<"等运算符.比如 "Where ID > 32".(这里假设[ID]为数字型.)

这是打开的部分.第二个很重要的部分就是查询记录.

数据库它并不是把所有记录全部放到一个变量中备用的.而是以"当前记录"的形式来返回一个值.所以我们想从中找到有用的信息,就必须要对信息进行定位/筛选.

定位:
移动到下一条 Recordset.MoveNext
移动到上一条 Recordset.MovePrevious
移动到最后一条 Recordset.MoveLast
移动到第一条 Recordset.MoveFrist
移动到某一条 Recordset.Move Number

筛选:
Recordset.Find "条件"

如:[用方法(2)打开表之后]
Private Sub Command1_Click()
Recordset.Find "用户名=" & "text1.text"
If Recordset.Eof <> True Then
Msgbox "该用户的密码是:" & Recordset("密码").value,64
Else
Msgbox "未找到该用户的资料!",16
End If
End Sub

MoveNext 只有当Eof不为True时,才可用,否则发生错误.而MovePrevious刚是Bof不为True时....
而只要Eof 和 Bof中有一个不为真时,也就是说只要有一条记录时,它就可以使用.

Find 方法中的条件和Open时的第一个参数中的条件表述方法是完全一致的.当在已打开的记录集中,找不到该记录时,Eof为True.找到则当前的值就是符合条件的记录.

第三个部分就是添加/修改记录.
修改记录很简单,先按以上的方法找到相关记录之后,给记录赋值就可以了.
比如:[(修改密码)按方法(1)打开表之后]
Recordset("密码").value = "123456"
Recordset.Updata
需要注意的就是,在修改完成后,要调用Updata方法,这样修改才能生效.

而添加记录则可以用以下代码来实现:
Recordset.addnew
Recordset("用户名").value = "Admin"
Recordset("密码").value = "Admin"
Recordset.Updata

这里,先要调用Addnew方法,增加一条新记录,然后对这个新记录中的各字段赋值,最后再调用Updata方法.

到这里就差不多了,最后说一下上面提到的几个方法.

Recordset.Open SQL语句,数据源,游标类型,打开方法

SQL语句不用说了,就是Select那啥的,目的就是按要求从表中返回数据
数据源就是一个打开之后的Connection对象.
去他妈的游标类型,填1就可以了 [偷笑ing]
打开方法对应了几个常数,具体哪几个可以从对象浏览器里看.
对应数值的意义:
1 只读 2 独占 3 可写 4 自已可写,别人可读

Connection.open 连接代码,服务器用户名,密码
这里的连接代码就不在多说了,服务器用户名,密码只有在连接远程数据库时才用到.
参考技术A provide的问题,连接access改为Microsoft.Jet.OLEDB.4.0,vb2008 oledbdataAdapter控件的方法:新建连接——数据源——更改——其他——Microsoft.Jet.OLEDB.4.0,然后配置好相应配置即可 参考技术B 1.连接数据库的那页conn.asp,最上面有句on error resume next,去掉这句,刷新页面,错误提示终于出现了:
Microsoft OLE DB Provider for SQL Server (0x80004005)
无效的授权说明
页面中是这样写的:
ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"
2.改为:
ConnStr = "DRIVER=SQL Server; SERVER=服务器名; UID=用户名; password=密码;
DATABASE=数据库名;"
刷新,成功。
参考技术C 方法1,
建立一个模块
将工程的启动设置为 SUB MAIN
在模块里写下面代码
Public db As Database
Public rs As Recordset
Sub main()
set db=db.opendatabase("数据库路径"<建议用相对路径--就是把数据库文件和工程文件放在同一目录下--相对路径就是APP.PATH+"数据库名带后缀">)
第一启动窗体<比如:form1>.show
end sub
以后在其他窗体中如果要调用数据库只用在窗体中写代码
set rs=openrecordset(<可以是数据库的表--如"student",也可以是查询语句--如"select* form student">)
这时数据库的内容都存在FILE集合里
比方说set rs=openrecordset("select* form student")
rs.file(0)就是SQL语句查询结果的第一列
rs.files就是整个结果
使用text1.text=rs.file(0)就可以把文本框于查询结果帮定起来
如果要对数据库进行修这时用以下代码:
db.Execute (<SQL语句--如"insert into student(sno,sname) value("","")">)
方法2,
工程--部件--选择microsoft data bound grid control 5.0
然后在窗体中添加左边工具栏的 DATA 和DBGRID 控件
选择DBGRID 将属性DATASOURCE 设置为DATA控件的名字(如DATA1)
然后选择DATA 将属性CONNECT设置为ACCESSS 2000
设置DATABASENAME 选择数据库的存放路径
最后设置RECORDSET 为需要连接的表的名字
运行就可以看到 DATAGRID中显示了数据库的信息
参考技术D provider的问题!

以上是关于vb.net连接access数据库问题的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET连接access数据库文件时提示“无效的授权说明”

Access 数据库不会从 VB.NET 更新

vb.net链接数据库怎么出现链接不上请大神指点?

vb.net 怎么操作数据库

vb.net 怎么操作数据库

vb.net数据库操作