C#程序,怎样实现播放存入ACCESS中的声音
C#程序直接播放文件夹中的声音文件,容易实现,但是这些声音文件容易被删除,改名而出问题。我现在把声音文件序列化存入ACCESS中,但不能播放,请大神帮看看。新建一个名为 “声音保存” 的ACCESS数据库,建一个名为 “人名” 的表。两个字段,“姓名”和“声音”,声音字段的数据类型为 OLE 对象
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using
using System.Media;
namespace 播放数据库存放的声音
{
public partial class Form1 : Form
{
static string str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=声音保存.mdb;Jet OLEDB:Database Password=;";
static OleDbConnection con = new OleDbConnection(str);
OleDbDataAdapter sqlda = new OleDbDataAdapter("select 姓名 from 人名", con);
DataSet ds = new DataSet();
SoundPlayer pla = new SoundPlayer();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
con.Open();
ShowInfo();
con.Close();
}
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{ //双击,在文本框中显示姓名,并读出声音
string name = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
if (name != "")
{
con = new OleDbConnection(str);
OleDbDataAdapter sqlda = new OleDbDataAdapter("select * from 人名 where 姓名='" + name + "'", con);
DataSet ds = new DataSet();
sqlda.Fill(ds);
//姓名在第一列
textBox1.Text = ds.Tables[0].Rows[0][0].ToString();
//声音数据在第二列
byte[] data = (byte[])ds.Tables[0].Rows[0][1];
//到此能夠获取数据
MemoryStream MStream = new MemoryStream(data);
//播放声音,不成功,无声。
pla.Stream = MStream;
}
}
private void ShowInfo()
{ //显示姓名
sqlda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.ReadOnly = true;
dataGridView1.AllowUserToAddRows = false;
}
}
}
[此贴子已经被作者于2022-9-17 18:59编辑过]