vb.net操作数据库之ACCESS(1)

一直想写下数据库操作方面的,只是没什么时间(好像是借口,应该是懒或者没心情吧,呵呵)。最近发现CSDN上

还是每天有人要问这些内容,我有的时候就懒的回答,呵呵,主要不断的去找代码给他们累啊。所以还是听高人的,来

个一劳永逸,自己重新温习下,也好给其他人一些帮助。

 

    这个数据库操作我会写个系列性的吧, 先写ACCESS。不知道这个一篇能写多长,不行我要分级篇了。

    其实ACCESS的操作基本都其他数据库一个样,只是长的不一样,大家有种畏惧还是陌生?其实是纸老虎啦。

 

    好了,先说连接方面:

 

 

    Public Function DB_CnStr() As String
Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "./FlashCard.mdb"
End Function

 上面的代码就是一个公用函数,因为多处要用到,懒得每次都写,直接调用下就OK了。中间部分就是一个数据库连接字串,

Data Source=" & Application.StartupPath & "./FlashCard.mdb"这里就是设置你的数据库地址,具体代码不用我解释了吧?

 

    如果有密码就需要再加一个账号密码了.

 

     User ID=myUsername;Password=myPassword

 

这个资料太多了,也基本差不多,随便抓抓就来咯。

 

那下面是不是要说说如何操作了?对,操作数据库嘛,无非就是查询,增加,删除,修改这几种。代码方面基本也差不多了,只是SQL上要换名字。废话不说了,直接上代码好了。

 

‘这里就是“查询”部分咯,具体怎么查是写SQL的问题了,先不讨论  
’先连接
DBConnection.ConnectionString = DB_CnStr()
DBConnection.Open()
'开始查询
Dim sql As New System.Text.StringBuilder

sql.Append(" SELECT * FROM WORDINFO")
sql.Append(" WHERE CLASS='").Append(Classstring).Append("'")

Dim cmd As New OleDb.OleDbCommand(sql.ToString, DBConnection)
Dim RS As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(cmd)
DT = New DataTable

RS.Fill(DT)
DBConnection.Close()

'有查到则显示出来
Rowcount = DT.Rows.Count
If Rowcount = 0 Then
MsgBox("No Record ",BoxStyle.Critical, "Error")
Me.Close()
else
'这里写显示数据或者应用数据,自己看吧
end if

‘开始演示“增加”功能吧,我这里只是演示这个执行的功能,怕有人看不懂,所以在源代码上修改了下
str = New System.Text.StringBuilder
str.Append(" INSERT INTO WORDINFO ([PICTURE],[ENGLISHNAME],[CHINESENAME],[VOICE],[Class]) ")
str.Append(" VALUES(PICTURE,ENGLISHNAME,CHINESENAME,VOICE,Class)")
‘上面就是一般的SQL而已,下面这句很关键,是执行语句。
cmd.ExecuteNonQuery()

’下面是“修改”了。
DBConnection.ConnectionString = DB_CnStr()
DBConnection.Open()

Dim str As New System.Text.StringBuilder
str.Append(" UPDATE USERINFO ")
str.Append(" SET [PASSWORD]='").Append(Password).Append("'")
str.Append(" WHERE [USERNAME]= '").Append(Username).Append("'")

Debug.WriteLine("")
Debug.WriteLine(str.ToString)
Dim cmd As New OleDb.OleDbCommand(str.ToString, DBConnection)
cmd.ExecuteNonQuery()

MsgBox("Update OK", MsgBoxStyle.Information)
‘好了,最后一个“删除”
Dim str As New System.Text.StringBuilder
str.Append(" DELETE FROM USERINFO ")
str.Append(" WHERE ")
str.Append(" [USERNAME]= '").Append(username).Append("'")
Debug.WriteLine("")
Debug.WriteLine(str.ToString)
cmd = New OleDb.OleDbCommand(str.ToString, DBConnection)
cmd.ExecuteNonQuery()
MsgBox("删除完成", MsgBoxStyle.Information)

不知道大家有没有看清楚, 这里就是一个ACCESS操作的基本内容了。我想你这些明白了,数据库操作也该明白一大半了。

这里我要考下看官了,你有没有注意到查询和新增、插入等有什么区别没?注意看哦,栏位的名称在查询中没有加括号,而

在其他的地方有,为什么呢?我也不知道,哈哈!但是一定要加哦,不加ACCESS就不认识,不能成功。记得!!

 

还有的一些问题,比如存储图片啊,声音啊之类的文件,如何读取然后显示或者播放啊,这又一个技术问题了,呵呵,卖弄下。

 

   上一篇中我已经说了下如何操作ACCESS数据库,下面来说说存取图片,声音之类的问题。

 

   由于图片,声音不能直接存储,这里就要用到数据流方式了。对于.NET中的一些术语概念我仍然很迷糊,在学习中。主要我不是专业的,

只是开始学了点VB6代码,然后就用VB.NET了,所以目前只是会写点代码,却不知道原理,很惭愧。

    哎哟,走题了,赶紧回来,不好意思!

   

     好吧,我们先看看图片和声音的存储和读取。看下代码。

 

 

   ’这段代码是插入图片和声音的代码
’第一个就是图片了,path当然是图片的地址了
Picturebyte = My.Computer.FileSystem.ReadAllBytes(PicturePath)
’下面这个就是声音咯,voicepath自然还是声音地址了
Voicebyte = My.Computer.FileSystem.ReadAllBytes(VoicePath)

‘这里就开始照旧写SQL,区别以前的地方就是这里是用COMMAND的一个参数来赋值
str = New System.Text.StringBuilder
str.Append(" INSERT INTO WORDINFO ([PICTURE],[ENGLISHNAME],[CHINESENAME],[VOICE],[Class]) ")
str.Append(" VALUES(?,?,?,?,?)")

cmd = New OleDb.OleDbCommand(str.ToString, DBConnection)
cmd.Parameters.Add(New OleDb.OleDbParameter)
cmd.Parameters(0).Value = Picturebyte

cmd.Parameters.Add(New OleDb.OleDbParameter)
cmd.Parameters(1).Value = EnglishName

cmd.Parameters.Add(New OleDb.OleDbParameter)
cmd.Parameters(2).Value = ChineseName

cmd.Parameters.Add(New OleDb.OleDbParameter)
cmd.Parameters(3).Value = Voicebyte

cmd.Parameters.Add(New OleDb.OleDbParameter)
cmd.Parameters(4).Value = Classstring

cmd.ExecuteNonQuery()’sql写完了就开始执行

DBConnection.Close()

MsgBox("Save OK", MsgBoxStyle.Information)


 

看看上面的代码是不是很简单了?就这样就可以存储进数据库咯,我这里还是用ACCESS来演示的,sql之类的还要简单。

行了,不说别的了,继续实行功能吧,其他的问题我放在最后交代。

下面我们来看看如何读取,看代码。(怎么有点像武侠上看刀一个味?呵)

 

 

        Dim Englishname As String
Dim Picturebyte() As Byte
Dim Voicebyte() As Byte
Dim stream As New ADODB.Stream

Englishname = Trim(SearchTBox.Text)
If Englishname <> "" Then

DBConnection.ConnectionString = DB_CnStr()
DBConnection.Open()
'开始查询
Dim sql As New System.Text.StringBuilder

sql.Append(" SELECT * FROM WORDINFO")
sql.Append(" WHERE ENGLISHNAME='").Append(Englishname).Append("'")


Dim cmd As New OleDb.OleDbCommand(sql.ToString, DBConnection)
Dim RS As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(cmd)
Dim DT As New DataTable

RS.Fill(DT)
DBConnection.Close()

'有查到则显示出来
If DT.Rows.Count = 0 Then
MsgBox("No Record ", MsgBoxStyle.Critical, "Error")
Exit Sub
Else
'界面初始化
Modifybtn.Enabled = True
Deletebtn.Enabled = True
'EnglishNameTBox.Enabled = True
ChineseNameTBox.Enabled = True
ClassTbox.Enabled = True
InsertPicLinkLab.Enabled = True
InsertVoiceLinkLab.Enabled = True
TestLinkLab.Enabled = True
RecordLinkLab.Enabled = True
Printbtn.Enabled = True
SearchTBox.Text = ""

’上面你可以不要看了,关键来咯,下面是开始显示图片
Picturebyte = DT.Rows(0).Item(1)
PictureBox1.Image = Bitmap.FromStream(New IO.MemoryStream(Picturebyte, True), True)
EnglishNameTBox.Text = DT.Rows(0).Item(2).ToString
ChineseNameTBox.Text = DT.Rows(0).Item(3).ToString
ClassTbox.Text = DT.Rows(0).Item(5).ToString

‘这里是取出声音文件了,需要交代的是,我研究了很久(套用行家台词),没找到好的方法,
‘好像只能先把声音文件暂存出来,然后你去播放之类的动作。不知道能不能直接播放流文件,
’或者有其他的方法,这个是刚刚想到的,呵呵,以后去尝试下。
With stream
.Mode = ADODB.ConnectModeEnum.adModeReadWrite
.Type = ADODB.StreamTypeEnum.adTypeBinary
.Open()
.Write(DT.Rows(0).Item(4))
.SaveToFile("c:/test.wav ", ADODB.SaveOptionsEnum.adSaveCreateOverWrite)
End With

VoiceTBox.Text = "c:/test.wav "
End If
Else
MsgBox("English Name is empty", MsgBoxStyle.Critical, "Error")

End If

 OK,上面一些话呢就是说了下存储和读取了,其他的更新之类的就不要说了吧?我想大家肯定比我还聪明。

 

不知道这样用代码来说,能不能帮助到大家清楚这些操作方法呢,希望大家能和我交流,我的空间里有联系方式。

 

最后呢,我还要啰嗦下,其实图片和声音之类的文件太大,或者你的程序中用到很多的话,还是不要直接存储到数据库里,自己单独用

一个文件夹放置他们,然后呢你就把这些文件的地址保存到数据库里,这样来说就会很合理化了,不会影响到数据库和程序的性能。

我这里只是做一个介绍,大的项目就要有性能方面的考虑了。好了,就说这么多,谢谢!

posted on 2012-04-06 22:32  webzhuazi  阅读(2814)  评论(0编辑  收藏  举报

导航