将音频存储在 Sql Server 2005 中,并在 windows application .net 中检索并播放它。






3.77/5 (18投票s)
本文演示了如何将音频文件插入 SQL Server,以及如何从 SQL Server 获取音频文件并在 .Net 中播放。

引言
大家好,本文介绍了如何在 SQL Server 2005 中存储/检索音频文件。本文的主要方面是如何将二进制格式的音频数据存储到 SQL Server 中。从 Sql Server 再次检索此数据并使用 Windows media player 组件对象模型工具播放它在某种程度上有些棘手!
如您所知,您计算机中的所有音频文件和图片都是二进制格式。这意味着它们内部有 0 和 1。因此,如果您想将这些类型的文件存储到 SQL Server 2005 中,您应该在 SQL Server 2005 中有一个字段,其数据类型应为“varbinary(max)”。
此数据类型能够存储二进制文件。请注意,您可以在这种数据类型中存储任何内容,如果您希望在此字段 (varbinary) 中存储一些文本文件,则没有任何限制,因为计算机中的每个数据在其最后一点都转换为 0 和 1(二进制)。
背景
您应该熟悉 C#、Sql Server 和 .Net 中的文件处理。如果这样,请跳到下一阶段。
Using the Code
在我的代码中,我使用了一个名为“Sample”的数据库。其中有一个表 (tblVoice),其中包含一个二进制格式的字段 (fldVoice)。我的意思是它的数据类型是 varbinary(max)。这就是我在我的项目中使用的关于 Sql Server 2005 的全部内容。
我用 c# 语言创建了一个 win 应用程序项目。在我的表单中,我使用了两个按钮,一个用于将音频文件插入 SQL SErver 2005,另一个用于从 SQL sErver 检索并在 Windows media player 中播放。我的表单中还有一个 windows media player。我通过转到工具箱并右键单击并在 com 选项卡中选择一个项目来引入它。在此选项卡中,您应该导航到 windows media player 并在找到它后单击确定以将此 COM 对象附加到您的工具箱。
然后,您应该将此 windows media player 拖放到您的表单中。其余的工作在按钮的 Click 事件中完成。
在我的项目中,我的 D:\ 驱动器中有一个名为 m.wma 的音频文件。
对于插入音频文件,您应该首先将该文件转换为字节数组。这样,您就可以将此字节数组存储到 fldVoice 中。
byte[] stream = File.ReadAllBytes(@"d:\m.wma");
com.Parameters.AddWithValue("@voice", stream);
对于从数据库检索音频文件,您应该简单地将检索到的数据强制转换为 byte[] 数组
SqlCommand com = new SqlCommand("select * from tblVoice", con);
DataTable dt = new DataTable();
SqlDataReader dr = com.ExecuteReader();
dt.Load(dr);
byte[] stream = (byte[])dt.Rows[0][0];
Windows media player 可以读取文件。它无法读取任何流。由于此缺点,我首先创建了一个带有 .wma 扩展名的文件并将我的 byte[] 数组存储在其中,然后我将此文件提供给 windows media player 的 URL 以播放我的文件
File.WriteAllBytes("D:\\news.wma", stream);
axWindowsMediaPlayer1.URL = "D:\\news.wma";
关注点
我得出的结论是,windows media player 只能读取文件,而不能读取流。