如何使用VB.NET通过窗体将视频文件添加到Access数据库?
如何用VB.NET将视频文件存入Access数据库的OLE对象字段
嗨,我懂你想通过VB.NET窗体把视频文件存入Access的OLE对象字段~既然你已经有存图片的代码,其实思路大同小异,只是处理的文件类型不同而已。下面我一步步给你拆解怎么修改和实现:
核心思路
和存储图片一样,视频文件本质是二进制数据,我们只需要把视频文件读取成字节数组,再写入Access的OLE对象字段就可以了——OLE对象字段专门用来存储这类二进制数据。
修改后的完整代码示例
基于你提供的图片存储代码,我调整成了视频版本,还补全了关键逻辑:
Imports System.IO Imports System.Data.OleDb Private Sub btn_Adicionar_Click(sender As System.Object, e As System.EventArgs) Handles btnIncluir.Click ' 第一步:打开文件选择框,让用户选视频 Using openFileDialog As New OpenFileDialog() ' 设置支持的视频格式,你可以按需添加更多 openFileDialog.Filter = "视频文件|*.mp4;*.avi;*.mov;*.wmv|所有文件|*.*" openFileDialog.Title = "选择要添加的视频文件" If openFileDialog.ShowDialog() = DialogResult.OK Then Dim videoFilePath As String = openFileDialog.FileName ' 第二步:把视频文件读取成字节数组 Dim videoBytes As Byte() = File.ReadAllBytes(videoFilePath) ' 第三步:连接Access数据库并插入数据 Using cn As New OleDbConnection() ' 根据你的Access版本选连接字符串: ' 如果你用的是旧版Access(.mdb文件): cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\YourDatabase.mdb" ' 如果是新版Access(.accdb文件),要确保电脑上安装了新版的Access数据库引擎: ' cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\YourDatabase.accdb" Using cmd As New OleDbCommand() cmd.Connection = cn ' 假设你的表叫Videos,有FileName(存文件名)和VideoData(OLE对象字段)两个列 cmd.CommandText = "INSERT INTO Videos (FileName, VideoData) VALUES (@FileName, @VideoData)" ' 给SQL命令加参数,避免SQL注入,也更安全 cmd.Parameters.AddWithValue("@FileName", Path.GetFileName(videoFilePath)) cmd.Parameters.AddWithValue("@VideoData", videoBytes) Try cn.Open() cmd.ExecuteNonQuery() MessageBox.Show("视频成功存入数据库啦!") Catch ex As Exception MessageBox.Show("添加失败:" & ex.Message) End Try End Using End Using End If End Using End Sub
关键注意事项
- 连接字符串适配:一定要根据你的Access文件类型(.mdb/.accdb)选对应的Provider,新版Access需要确保电脑上安装了对应版本的数据库引擎。
- 字段类型正确:Access表中的存储字段必须设置为OLE对象,别选错成文本、备注这些类型,不然存不进去。
- 大文件提醒:如果视频文件很大(比如几百MB以上),直接存入数据库会让数据库体积暴涨,读取和维护也会变慢。这种情况更推荐只把视频文件的路径存到数据库,视频文件本身放在本地文件夹里,这样性能和灵活性都更好。
可选:从数据库读取并播放视频
如果你之后需要把存进去的视频取出来播放,可以把字节数组写入临时文件,再用MediaPlayer控件播放:
Private Sub btn_PlayVideo_Click(sender As Object, e As EventArgs) Handles btn_PlayVideo.Click Using cn As New OleDbConnection() cn.ConnectionString = "你的数据库连接字符串" ' 假设根据文件名查询视频 Using cmd As New OleDbCommand("SELECT VideoData FROM Videos WHERE FileName = @FileName", cn) cmd.Parameters.AddWithValue("@FileName", "你要播放的视频文件名.mp4") cn.Open() Dim videoBytes As Byte() = DirectCast(cmd.ExecuteScalar(), Byte()) ' 写入临时文件,注意扩展名要和视频类型匹配 Dim tempPath As String = Path.GetTempFileName() & ".mp4" File.WriteAllBytes(tempPath, videoBytes) ' 用AxWindowsMediaPlayer控件播放(需要先在工具箱添加这个控件) AxWindowsMediaPlayer1.URL = tempPath End Using End Using End Sub
内容的提问来源于stack exchange,提问作者Hagar Sete
相关产品推荐
相关产品推荐

