当前位置:编程学习 > C#/ASP.NET >>

数据库存储音乐文件!(求大神!)

帮忙看看这段代码,为什么有错误!!!如果解决!
将音乐MP3文件存储到数据库的image类型里!

            OpenFileDialog sf = new OpenFileDialog();
            sf.Filter = "(*.mp3)|*.mp3";
            sf.ShowDialog();
            Image img = Image.FromFile(sf.FileName);
            conn = new SqlConnection(connectString);
            cmd = new SqlCommand("Update Mucis Set mucis=(@img) where id=1", conn);
            cmd.Parameters.Add(new SqlParameter("@img", SqlDbType.Image));
            MemoryStream ms = new MemoryStream();
            img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

            cmd.Parameters[0].Value = ms.ToArray();
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
            ms.Close();

--------------------编程问答-------------------- 大哥 System.Drawing.Imaging.ImageFormat.Jpeg 哪有把mp3转jpg的道理啊,直接用流读取存储就可以了 --------------------编程问答-------------------- 囧  --------------------编程问答-------------------- funxu
有没代码丫,给我看看,流的存储,,
是不是存储路径? --------------------编程问答--------------------

public static void Add( string filePath)
        {
            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);

            byte[] myMp3 = br.ReadBytes((int)fs.Length);

            br.Close();
            fs.Close();

            SqlConnection cn = new SqlConnection("db conn str...... ");
            SqlCommand cmd = new SqlCommand("INSERT   INTO   Test( Mp3)   VALUES   ( @Mp3) ", cn);
            
            cmd.Parameters.Add("@Mp3 ", SqlDbType.Image, myMp3.Length).Value = myMp3;

            cn.Open();
            cmd.ExecuteNonQuery();
            cn.Close();
        }


试试 --------------------编程问答-------------------- 楼主把音乐MP3文件存储到数据库的image类型里是想做什么?你是想把MP3保存在数据库里吗?如果是,就把路径保存在数据库里,读取的时候,调用路径就好了。
--------------------编程问答-------------------- xiaomingtage
我想吧音乐文件保存在数据库中 --------------------编程问答-------------------- 其实我感觉没必要把音乐存到数据库中 
这样太繁琐了 干嘛不只存路径
如果真的需要 你可以用流的方式就可以了 --------------------编程问答-------------------- 存成2进制的文件,以image类型存储 --------------------编程问答-------------------- 读取文件 得到 byte[] 数组 直接存 --------------------编程问答-------------------- 4楼正解 --------------------编程问答-------------------- 存个路径多方便啊,并且效率也很高,减少数据库的压力 --------------------编程问答-------------------- 2进制 --------------------编程问答-------------------- LZ,是这句代码出错:mage img = Image.FromFile(sf.FileName);

Image是用来加载图像格式文件的,如果文件没有有效的图像格式,或者如果 GDI+ 不支持文件的像素格式,则此方法将引发 OutOfMemoryException 异常。

你把代码改成:
try

               FileStream fs = new FileStream(@"c:\test.mp3", FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                byte[] myMp3 = br.ReadBytes((int)fs.Length);

                br.Close();
                fs.Close();

               //后面的还是用你的代码

catch(Exception ex)
{
}


另外,提个建议:写代码加上try{}catch{}语句,这样帮你定位代码出错位置!
             
--------------------编程问答-------------------- 强烈不建议文件入库,blob file 也不建议!太依赖数据库了!二进制存读的时候严重占用数据库资源。blob file和直接存地址没区别。

还是直接存文件地址吧。手上一个项目把html文本入库了,运行五年,数据库已经4个多G了,机器本来就老慢的要死。
--------------------编程问答-------------------- 学习! --------------------编程问答-------------------- 先将文件转成流,然后再将流存储到数据库中去就可以了吧! --------------------编程问答-------------------- 先将文件转成流,然后再将流存储到数据库中去就可以了吧!但是还是觉把文件放到硬盘上,然后存地址比较好! --------------------编程问答--------------------
引用 2 楼 karascanvas 的回复:

UP --------------------编程问答-------------------- 4楼+1 --------------------编程问答-------------------- 木有尝试过,偶都是存储的路径。 --------------------编程问答-------------------- 严重同意存路径和文件名的方法。直接用linq to sql 调用数据库更简单。 --------------------编程问答-------------------- 存储文件路径好!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,