none
รบกวนสอบถามเกี่ยวกับการเก็บไฟล์ .pdf ลงในฐานข้อมูล SQL SERVER RRS feed

  • คำถาม

  • การเขียนเว็บโดยใช้ภาษา C#  สามารถทำการ Upload File ที่เป็น .pdf หรือ .doc  /  .docx

    แล้วเก็บลงฐานข้อมูล  SQL SERVER ได้หรือป่าวคะ

    เคยเห็นแต่การเก็บไฟล์ภาพลงในฐานข้อมูล

    17 กุมภาพันธ์ 2555 18:34

คำตอบ

  • โดยทั่วไปเวลาเรา save ไฟล์ขนาดใหญ่ ก็จะขึ้นอยู่กับ database และ path ใน database  (ไม่จำเป็นต้อง convert ไฟล์)



    และอีกแบบนึง คือ save ไฟล์เป็นแบบ binary (อันนี้ต้อง convert ไฟล์)



    ซึ่งเรากำลังพูดถึงแบบหลัง



    ก่อนอื่น ใน sql server จะต้องกำหนด field ให้เป็นแบบ binary (varbinary(MAX), binary)



    ส่วนในโปรแกรมเราจะต้อง convert ไฟล์ ให้เป็น byte array ดังนี้:



    FileStream st = new FileStream(@"C:\filename.jpg", FileMode.Open);

    byte[] buffer = new byte[st.Length];

    st.Read(buffer, 0, (int)st.Length);

    st.Close();



    ถ้าในกรณีที่ไฟล์มีขนาดใหญ่มาก อาจจะต้องทำการอ่านไฟล์ใน byte array มากกว่า 1 ครั้ง



    แล้วเราก็จะทำการส่งค่าเข้าไปใน database



    SqlConnection conn = new SqlConnection("...");

    SqlCommand cmd = new SqlCommand("UPDATE SomeTable SET
    image=@image WHERE ID = 1", conn);

    cmd.Parameters.AddWithValue("@image", buffer);

    conn.Open();

    int i = cmd.ExecuteNonQuery();

    conn.Close();



    ในตัวอย่างนี้ คือกำหนด image ไปยังเซลที่มีค่า id = 1



    และถ้าเราต้องการ save ไฟล์ประเภทอื่นๆ ให้เพิ่ม column เข้าไป เพื่อเพิ่มประเภทของไฟล์ที่ต้องการ แล้วทำการ convert



    ส่วนตอนดึงข้อมูล ก็จะอ่านข้อมูลที่เป็น binary แล้ว convert เป็น stream



    SqlConnection connection = new SqlConnection("...");

    connection.Open ();

    SqlCommand command = new SqlCommand ("select PdfFile fromTable", connection);

    byte[] buffer = (byte[]) command.ExecuteScalar ();

    connection.Close();

    FileStream fs = new FileStream(@"C:\test.pdf", FileMode.Create);

    fs.Write(buffer, 0, buffer.Length);

    fs.Close();

    โดยทั่วไปเวลาเรา save ไฟล์ขนาดใหญ่ ก็จะขึ้นอยู่กับ database และ


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • ทำเครื่องหมายเป็นคำตอบโดย supa_sModerator 22 กุมภาพันธ์ 2555 5:18
    20 กุมภาพันธ์ 2555 6:09
    ผู้ดูแล
  • ข้อมูลเพิ่มเติม

    How To Store Any File into SQL Database

    Save and view pdf file from SQL server database in c# WinForms


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • ทำเครื่องหมายเป็นคำตอบโดย supa_sModerator 22 กุมภาพันธ์ 2555 5:18
    20 กุมภาพันธ์ 2555 6:19
    ผู้ดูแล

ตอบทั้งหมด

  • โดยทั่วไปเวลาเรา save ไฟล์ขนาดใหญ่ ก็จะขึ้นอยู่กับ database และ path ใน database  (ไม่จำเป็นต้อง convert ไฟล์)



    และอีกแบบนึง คือ save ไฟล์เป็นแบบ binary (อันนี้ต้อง convert ไฟล์)



    ซึ่งเรากำลังพูดถึงแบบหลัง



    ก่อนอื่น ใน sql server จะต้องกำหนด field ให้เป็นแบบ binary (varbinary(MAX), binary)



    ส่วนในโปรแกรมเราจะต้อง convert ไฟล์ ให้เป็น byte array ดังนี้:



    FileStream st = new FileStream(@"C:\filename.jpg", FileMode.Open);

    byte[] buffer = new byte[st.Length];

    st.Read(buffer, 0, (int)st.Length);

    st.Close();



    ถ้าในกรณีที่ไฟล์มีขนาดใหญ่มาก อาจจะต้องทำการอ่านไฟล์ใน byte array มากกว่า 1 ครั้ง



    แล้วเราก็จะทำการส่งค่าเข้าไปใน database



    SqlConnection conn = new SqlConnection("...");

    SqlCommand cmd = new SqlCommand("UPDATE SomeTable SET
    image=@image WHERE ID = 1", conn);

    cmd.Parameters.AddWithValue("@image", buffer);

    conn.Open();

    int i = cmd.ExecuteNonQuery();

    conn.Close();



    ในตัวอย่างนี้ คือกำหนด image ไปยังเซลที่มีค่า id = 1



    และถ้าเราต้องการ save ไฟล์ประเภทอื่นๆ ให้เพิ่ม column เข้าไป เพื่อเพิ่มประเภทของไฟล์ที่ต้องการ แล้วทำการ convert



    ส่วนตอนดึงข้อมูล ก็จะอ่านข้อมูลที่เป็น binary แล้ว convert เป็น stream



    SqlConnection connection = new SqlConnection("...");

    connection.Open ();

    SqlCommand command = new SqlCommand ("select PdfFile fromTable", connection);

    byte[] buffer = (byte[]) command.ExecuteScalar ();

    connection.Close();

    FileStream fs = new FileStream(@"C:\test.pdf", FileMode.Create);

    fs.Write(buffer, 0, buffer.Length);

    fs.Close();

    โดยทั่วไปเวลาเรา save ไฟล์ขนาดใหญ่ ก็จะขึ้นอยู่กับ database และ


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • ทำเครื่องหมายเป็นคำตอบโดย supa_sModerator 22 กุมภาพันธ์ 2555 5:18
    20 กุมภาพันธ์ 2555 6:09
    ผู้ดูแล
  • ข้อมูลเพิ่มเติม

    How To Store Any File into SQL Database

    Save and view pdf file from SQL server database in c# WinForms


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • ทำเครื่องหมายเป็นคำตอบโดย supa_sModerator 22 กุมภาพันธ์ 2555 5:18
    20 กุมภาพันธ์ 2555 6:19
    ผู้ดูแล