一直想写下数据库操作方面的,只是没什么时间(好像是借口,应该是懒或者没心情吧,呵呵)。最近发现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,上面一些话呢就是说了下存储和读取了,其他的更新之类的就不要说了吧?我想大家肯定比我还聪明。

 

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

 

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

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

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