由于图片,声音不能直接存储,这里就要用到数据流方式了。对于.NET中的一些术语概念我仍然很迷糊,在学习中。主要我不是专业的, 只是开始学了点VB6代码,然后就用VB.NET了,所以目前只是会写点代码,却不知道原理,很惭愧。 哎哟,走题了,赶紧回来,不好意
由于图片,声音不能直接存储,这里就要用到数据流方式了。对于.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,上面一些话呢就是说了下存储和读取了,其他的更新之类的就不要说了吧?我想大家肯定比我还聪明。
不知道这样用代码来说,能不能帮助到大家清楚这些操作方法呢,希望大家能和我交流,我的空间里有联系方式。
最后呢,我还要啰嗦下,其实图片和声音之类的文件太大,或者你的程序中用到很多的话,还是不要直接存储到数据库里,自己单独用
一个文件夹放置他们,然后呢你就把这些文件的地址保存到数据库里,这样来说就会很合理化了,不会影响到数据库和程序的性能。
我这里只是做一个介绍,大的项目就要有性能方面的考虑了。好了,就说这么多,谢谢!
查看更多关于vb.net操作数据库之ACCESS(2)的详细内容...