نمایش نتایج 1 تا 20 از 20

نام تاپیک: ذخيره فايل صوتي در دیتابیس

  1. #1
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    ذخيره فايل صوتي در دیتابیس

    سلام دوستان....
    می خواستم نحوه ذخیره صوت در دیتابیس رو بدونم ...
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  2. #2

    نقل قول: صوت در دیتابیس

    ابتدا در database در table مورد نظر یک فیلد از نوع image درست میکنی مثل PrimaryPath سپس


    آدرس فایل صوتی که از نوع wave است را توسط کد زیر به متغیری از نوع byte میدهی

    buffer1 = File.ReadAllBytes(txt_path.Text);


    س
    DataTable dt = new DataTable();
    newRow = dt.NewRow();
    newRow["PrimaryPath"] = buffer1;
    dt.Rows.Add(newRow);


    اصولا برای ذخیره فایل آن را به صورت byte در می آوریم و بهد به فیلد نسبت میدهیم.



  3. #3
    کاربر دائمی
    تاریخ عضویت
    آذر 1386
    محل زندگی
    سحابي #C ستاره ي Java
    پست
    192

    نقل قول: صوت در دیتابیس

    البته منظور از نوع داده image همون نوع داده BLOB تویه sql هست.
    بقیه مطلب هم کاملا درست است.

  4. #4
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: صوت در دیتابیس

    دوست عزیز ممنون....
    کلا اینطوری شد.اگه دوستان دیگه هم می خوان استفاده کنن......

    ذخیره...

    cmd.CommandText = "insert into sound (wav) values(@wav)";
    cmd.Connection = conn;
    byte[] buffer = File.ReadAllBytes(@"\rad.wav");
    cmd.Parameters.Add(
    "@wav", SqlDbType.Image).Value = buffer;
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();


    بازیابی.....

    [System.Runtime.InteropServices.DllImport("winmm.dll")]
    public staticextern long PlaySound(byte[] data, IntPtr hMode, int dwFlag);
    privatevoid button2_Click(object sender, EventArgs e)
    {
    cmd.CommandText =
    "select wav from sound where id = '1'";
    cmd.Connection = conn;
    SqlDataReader reader = null;
    byte[] wav = null;
    conn.Open();
    reader = cmd.ExecuteReader();
    if (reader.Read())
    {
    wav = (
    byte[])reader.GetValue(0);
    PlaySound(wav,
    IntPtr.Zero, 1 | 4);
    }
    conn.Close();
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  5. #5
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: صوت در دیتابیس

    آقا یه سوال فنی دیگه.....
    همان طور که در کد بالا می بینید با استفاده از winmm.dll صوتم رو بخش می کنم.حالا اگه بخوام یک WMPlayer به پروژم اضافه کنم تا کابر بتونه Visualization مدیاپلیر رو مشاهده کنه باید چه کار کرد؟!!!....
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  6. #6
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: صوت در دیتابیس

    کسی از دوستان ایده ای نداره؟..........
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  7. #7
    کاربر دائمی آواتار pesare_ariyayi
    تاریخ عضویت
    مهر 1386
    محل زندگی
    ملودی شهر باران
    پست
    108

    نقل قول: صوت در دیتابیس

    سلام
    ----یه مقدمه اول (در مورد بهینه ترین روش ذخیره سازی دیتا)

    یه روایتی هست که می گه اگه سایز فایلهاتون کوچیک بود (مثل عکسها اون هم نه با رزولوشن بالا و صوت ها و ویدیو های چند ثانیه ای) اونها رو تو database ذخیره کنید. اما اگه سایز زیادی داشتن اونها رو (تو پروژه های نت) تو سرور آپلود کنید و مسیرشون رو تو database ذخیره کنید

    ** این مثال برای فایلهای ویدئو آورده شده اما شما میتونین به همین طریق و با استفاده از همین type های فیلدهای database اون رو برای فایلهای صوتی استفاده کنید

    **کدها به زبان C#‎.net نوشته شده اند و برای sql server 2005

    **
    using System.Web;
    using System.Data.SqlClient;
    using System.Data;
    using System.Configuration;
    namespaceهایی هستن که باید به پروژتون اضافه بشن
    ** این مثال برای پروژه های وب هست. اگه می خواین برای pc بنویسید با یه خورده دستکاری همچی رو براه میشه

    --- فیلدهای مورد نیاز:
    [LEFT]field name type

    [LEFT]ID int

    video varbinary(MAX)
    Video_Name nvarchar(50)
    Video_Size bigint
    [RIGHT]--- استفاده از کد
    آپلود کردن فایل در این کد برای اینه که اون رو به نوع bytes تبدیل کنیم. این کار رو توسط کلاس HTTPPostedFile انجام می دیم سپس تو یک فیلد در database از نوع varbinary قرار می دیم.

    [LEFT]

    using System.IO;
    using System.Data.SqlClient;

    public partial class UploadVideo : System.Web.UI.UserControl
    {
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    byte[] buffer;//this is the array of bytes which will hold the data (file)

    SqlConnection connection;
    protected void ButtonUpload_Click(object sender, EventArgs e)
    {
    //check the file

    if (FileUpload1.HasFile && FileUpload1.PostedFile != null && FileUpload1.PostedFile.FileName != "")
    {
    HttpPostedFile file = FileUpload1.PostedFile;//retrieve the HttpPostedFile object

    buffer = new byte[file.ContentLength];
    int bytesReaded = file.InputStream.Read(buffer, 0, FileUpload1.PostedFile.ContentLength);
    //the HttpPostedFile has InputStream porperty (using System.IO;)

    //which can read the stream to the buffer object,

    //the first parameter is the array of bytes to store in,

    //the second parameter is the zero index (of specific byte) where to start storing in the buffer,

    //the third parameter is the number of bytes you want to read (do u care about this?)

    if (bytesReaded > 0)
    {
    try
    {
    string connectionString = ConfigurationManager.ConnectionStrings["uploadConnectionString"].ConnectionString;
    connection = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand
    ("INSERT INTO Videos (Video, Video_Name, Video_Size) VALUES (@video, @videoName, @videoSize)", connection);
    cmd.Parameters.Add("@video", SqlDbType.VarBinary, buffer.Length).Value = buffer;
    cmd.Parameters.Add("@videoName", SqlDbType.NVarChar).Value = FileUpload1.FileName;
    cmd.Parameters.Add("@videoSize", SqlDbType.BigInt).Value = file.ContentLength;
    using (connection)
    {
    connection.Open();
    int i = cmd.ExecuteNonQuery();
    Label1.Text = "uploaded, " + i.ToString() + " rows affected";
    }
    }
    catch (Exception ex)
    {
    Label1.Text = ex.Message.ToString();
    }
    }

    }
    else
    {
    Label1.Text = "Choose a valid video file";
    }
    }
    }
    //create a sqlcommand object passing the query and the sqlconnection object

    //when declaring the parameters you have to be sure u have set the type of video column to varbinary(MAX)

    [RIGHT]--- حالا چطوری فایل رو تو player پخش کنیم؟!

    مشکل اینجاست که تو player باید propertry ی src رو رو فایل تنظیم کنیم در حالی که ما جز یک متغیر از نوع bytes چیز دیگه یی نداریم!!! از 1 handler استفاده می کنیم
    [LEFT]

    using System;
    using System.Web;
    using System.Data.SqlClient;
    using System.Data;
    using System.Configuration;

    public class VideoHandler : IHttpHandler
    {

    public void ProcessRequest (HttpContext context)
    {
    string connectionString = ConfigurationManager.ConnectionStrings["uploadConnectionString"].ConnectionString;

    SqlConnection connection = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand("SELECT Video, Video_Name FROM Videos WHERE ID = @id", connection);
    cmd.Parameters.Add("@id", SqlDbType.Int).Value = context.Request.QueryString["id"];
    try
    {
    connection.Open();
    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.Default);
    if (reader.HasRows)
    {
    while (reader.Read())
    {
    context.Response.ContentType = reader["Video_Name"].ToString();
    context.Response.BinaryWrite((byte[])reader["Video"]);
    }
    }
    }
    finally
    {
    connection.Close();
    }
    }

    public bool IsReusable
    {
    get {
    return false;
    }
    }

    }
    [RIGHT]همونطور که می بینید یک متغیر از نوع HttpContext داریم که توسط کلاس SqlDataReader متغیر bytes رو تو خودش می نویسه

    حالا واسه پخش فایل باید از یک کنترل asp.net استفاده کنیم انجا از کنترل Repeter استفاده شده. با یک sql server, sql adapter رو می خونیم datasource رو با کنترل bind, Repeter می کنیم. اینجا میتونین انتخاب کنین که کدوم صوت یا ویدئوی database انتخاب بشه

    [LEFT]

    private DataTable GetSpecificVideo(object i)//pass the id of the video

    {
    string connectionString = ConfigurationManager.ConnectionStrings["uploadConnectionString"].ConnectionString;
    SqlDataAdapter adapter = new SqlDataAdapter("SELECT Video, ID FROM Videos WHERE ID = @id", connectionString);
    adapter.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = (int)i;
    DataTable table = new DataTable();
    adapter.Fill(table);
    return table;
    }
    protected void ButtonShowVideo_Click(object sender, EventArgs e)
    {
    Repeater1.DataSource = GetSpecificVideo(2);//the video id (2 is example)

    Repeater1.DataBind();
    }
    [RIGHT]
    حالا وقت player هستش
    به property ی url مقدار <'%# "VideoHandler.ashx?id=" + Eval("ID") %'> رو میدیم, مقدار ID همون اسم سطون IDی Datasourceای هست که repeater به اون Bind شده.

    [LEFT]
    کد HTML:
    <asp:Button ID="ButtonShowVideo" runat="server" onclick="ButtonShowVideo_Click" 
            Text="Show Video" />
        
     />
        <asp:Repeater ID="Repeater1" runat="server">
            
                <object id="player" classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" 
                            height="170" width="300">
    name="url" value='<%# "VideoHandler.ashx?id=" + Eval("ID") %>'/>                          name="showcontrols" value="true" />                          name="autostart" value="true" />                     </object>              </asp:Repeater>
    [RIGHT]هوفف. از مدیرا خواهش می کنم که یه کاری کنن که زبان انگلیسی با پرانتز و ویرگول فارسی کنار بیاد.
    و اینکه من نتونستم تگی برای کد های .net پیدا کنم. لطفاً اگه میدونید چطوریه با پیام خصوصی بهم بگید

  8. #8

    نقل قول: ذخيره فايل صوتي در دیتابیس

    سلام سجاد جان البته من فقط یه نظر کوچیک میدم ، بهتر بجای نوع داده ای image از نوع var binary استفاده کنی .

  9. #9
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: ذخيره فايل صوتي در دیتابیس

    نه مشکل من ذخیره کردن نیست.مشکل من ربط دادن فایل صوتی که در بانک ذخیره کردم به مدیا پلیری هست که به فرمم اضافه کردم.یعنی می خوام Visualization اون رو به نمایش در بیارم...
    البته می تونم صوت موجود در بانک رو یه جا ذخیره کنم و url اون رو به مدیا پلیر بدم .....دوست خوبمون pesare aryiaye هم گفتن صوت رو یه جا ذخیره کنم و ادرسش رو در بانک ذخیره کنم.ولی این حالت به کار من نمی یاد...
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  10. #10

    نقل قول: ذخيره فايل صوتي در دیتابیس

    سلام
    برای select کردن فایل صوتی از پایگاهم مشکل دارم
    مشکل من اینه که من می خوام در دستور select در قسمت where شرط بذارم تا یک فایل خاص برایم پیدا شود ولی error می ده
    چکار کنم؟

  11. #11

    نقل قول: ذخيره فايل صوتي در دیتابیس

    دستور SELECT ت رو بنویس اینجا ببینیم.

  12. #12

    نقل قول: ذخيره فايل صوتي در دیتابیس

    string gh = "d:\\tt.wma";
    byte[] dddd = File.ReadAllBytes(@gh);
    SqlConnection con = newSqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\database1.mdf;Integrated Security=True;User Instance=True");
    SqlCommand com = newSqlCommand(@"select flvoice from tblvoice where tblvoice.flvoice=" + dddd , con);

  13. #13

    نقل قول: ذخيره فايل صوتي در دیتابیس

    این خطا رو روی خط
    SqlDataReader
    dr = com.ExecuteReader بهم می ده:
    An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Add a name or single space as the alias name.
    Incorrect syntax near ''.

  14. #14

    نقل قول: ذخيره فايل صوتي در دیتابیس

    شما محتوای فایل رو میخواهید توی دیتابیس جستجو کنید؟؟؟
    نگفتید نام فایل رو میخواید search کنید؟

    فکر نکنم مقدار باینری رو بتونید به این شکل که نوشتید جستجو کنید. در این صورت فکر میکنم اگه از دستور select با پارامتر استفاده کنید مشکلتون حل شه.

  15. #15

    نقل قول: ذخيره فايل صوتي در دیتابیس

    چجوری می تونم نام فایل رو search کنم؟
    می شه یه نمونه کد بذارید؟

  16. #16

    نقل قول: ذخيره فايل صوتي در دیتابیس

    خب موقعه ذخیره کردن اطلاعات در دیتابیس٬ اسم فایل رو هم بگیر و توی یه فیلد کنارش ذخیره کن. مثلا از نوع nvarchar به اسم filename.
    همین٬ وقتی میخوای جستجو کنی روی اون جستجو کن.

  17. #17

    نقل قول: ذخيره فايل صوتي در دیتابیس

    این کارو خودمم کردم ولی error بهم می ده
    این error :
    invalid column name tt
    tt اسم فایلمه که توی دیتا بیس ذخیره کردم
    دلیل خطاش چی می تونه باشه؟
    می شه یه نمونه کد برام بذارید؟

  18. #18

    نقل قول: ذخيره فايل صوتي در دیتابیس

    ببخشید tt اسم فیلدمه

  19. #19

    نقل قول: ذخيره فايل صوتي در دیتابیس

    Query ت رو بزار اینجا ببینیم.

  20. #20

    نقل قول: ذخيره فايل صوتي در دیتابیس

    sqlconnection1.Open();
    strsql =
    "select ahang,esm from pm where esm="+invoice ;
    SqlCommand com = newSqlCommand(strsql, sqlconnection1 );
    SqlDataReader dr = com.ExecuteReader();
    dt.Load(dr);
    dr.Close();
    sqlconnection1.Close();
    byte[] stream = (byte[])dt.Rows[0][0];
    File.WriteAllBytes("d:\\news.wma", stream);
    MessageBox.Show("play");

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •