my name is omer and im a student. my project is a website, in the websitye there is an ption that the user will upload a file. the websiteput it on the database and than show it but some why all i get from database is “System.Byte[]” insed of getting the video’s bytes. idk know what is wrong in my code. help pls.
My library “my video helper” code:
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; public class MyVideoHelper { public MyVideoHelper() { } //הפונקציה מקבלת מסלול של קובץ ומחזירה את הקובץ מומר לבייטים public byte[] ConvertFileToByte(string location) { byte[] video = null; FileStream fs = new FileStream(location, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); int length = (int)(fs.Length); video = br.ReadBytes(length); return video; } //הפונקציה מקבלת קובץ תיקייה ושרת ושומרת את הקובץ בתיקייה //בשביל השרת פשוט תמיד תכתוב this public static string SaveFileInFoder(HttpPostedFile file, string folder, HttpServerUtility Server) { string location; if (file != null && file.ContentLength > 0) { location = Server.MapPath(folder) + "\" + System.IO.Path.GetFileName(file.FileName); try { file.SaveAs(location); } catch (Exception ex) { location = ex.Message; } } else { location = null; } return location; } }
my c sharp code:
using System; using System.Collections.Generic; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Text; public partial class potg : System.Web.UI.Page { public string username = ""; public string span = ""; protected void Page_Load(object sender, EventArgs e) { string check = (string)(Session["loggedin"]); if (check == "true") { string id2 = (string)(Session["DataTable"]); int number = int.Parse(id2); string command2 = "SELECT username FROM users"; DataTable table = MyAdoHelper.ExecuteDataTable("omerwatchdb.accdb", command2); int length = table.Rows.Count; string command3 = "SELECT profilePic FROM users"; DataTable table2 = MyAdoHelper.ExecuteDataTable("omerwatchdb.accdb", command3); username = "<div id='sidebar'> username:" + table.Rows[number - 1]["username"] + "<img id='profilePicRight'src='profile/" + table2.Rows[number - 1]["profilePic"] + ".png'></div>"; MyVideoHelper x = new MyVideoHelper(); string path = ""; if (Session["loggedIn"] != "true") { Response.Write("<script>alert('You Are not SignIN!');</script>"); return; } if ((video2.PostedFile != null) && (video2.PostedFile.ContentLength > 0)) { string hero3 = Request.Form["hero3"]; path = MyVideoHelper.SaveFileInFoder(video2.PostedFile, "potg", Server); string command = "INSERT INTO videos (hero, file) VALUES( '" + hero3 + "','" + x.ConvertFileToByte(path) + "')"; MyAdoHelper.DoQuery("omerwatchdb.accdb", command); } } string fileName = "omerwatchdb.accdb"; string sql = "SELECT file,hero FROM VIDEOS"; DataTable dt = MyAdoHelper.ExecuteDataTable(fileName, sql); int i = dt.Rows.Count; for (int c = 0; c < i; c++) { byte[] vid = (byte[])dt.Rows[c][0]; string hero = (string)dt.Rows[c][1]; string path3 = Server.MapPath("/potg") + "\" + hero +c+ ".mp4"; string name = Path.GetFileName(path3); File.WriteAllBytes(path3, vid); span += "<li data-name='" + name + "' onclick='potgShow(this)'><a href='#'>KobiMarimi " + hero + " </a></li>"; } } }
my library “MyAdoHelper” code:
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.OleDb; /// <summary> /// Summary description for MyAdoHelper /// פעולות עזר לשימוש במסד נתונים מסוג אקסס /// App_Data המסד ממוקם בתקיה /// </summary> public class MyAdoHelper { public MyAdoHelper() { // // TODO: Add constructor logic here // } public static OleDbConnection ConnectToDb(string fileName) { string path = HttpContext.Current.Server.MapPath("App_Data/");//מיקום מסד בפורוייקט path += fileName; //string path = HttpContext.Current.Server.MapPath("App_Data/" + fileName);//מאתר את מיקום מסד הנתונים מהשורש ועד התקייה בה ממוקם המסד string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" + path;//נתוני ההתחברות הכוללים מיקום וסוג המסד OleDbConnection conn = new OleDbConnection(connString); return conn; } /// <summary> /// To Execute update / insert / delete queries /// הפעולה מקבלת שם קובץ ומשפט לביצוע ומבצעת את הפעולה על המסד /// </summary> public static void DoQuery(string fileName, string sql)//הפעולה מקבלת שם מסד נתונים ומחרוזת מחיקה/ הוספה/ עדכון //ומבצעת את הפקודה על המסד הפיזי { OleDbConnection conn = ConnectToDb(fileName); conn.Open(); OleDbCommand com = new OleDbCommand(sql, conn); com.ExecuteNonQuery(); com.Dispose(); conn.Close(); } /// <summary> /// To Execute update / insert / delete queries /// הפעולה מקבלת שם קובץ ומשפט לביצוע ומחזירה את מספר השורות שהושפעו מביצוע הפעולה /// </summary> public int RowsAffected(string fileName, string sql)//הפעולה מקבלת מסלול מסד נתונים ופקודת עדכון //ומבצעת את הפקודה על המסד הפיזי { OleDbConnection conn = ConnectToDb(fileName); conn.Open(); OleDbCommand com = new OleDbCommand(sql, conn); int rowsA = com.ExecuteNonQuery(); conn.Close(); return rowsA; } /// <summary> /// הפעולה מקבלת שם קובץ ומשפט לחיפוש ערך - מחזירה אמת אם הערך נמצא ושקר אחרת /// </summary> public static bool IsExist(string fileName, string sql)//הפעולה מקבלת שם קובץ ומשפט בחירת נתון ומחזירה אמת אם הנתונים קיימים ושקר אחרת { OleDbConnection conn = ConnectToDb(fileName); conn.Open(); OleDbCommand com = new OleDbCommand(sql, conn); OleDbDataReader data = com.ExecuteReader(); bool found; found = (bool)data.Read();// אם יש נתונים לקריאה יושם אמת אחרת שקר - הערך קיים במסד הנתונים conn.Close(); return found; } //רועי public static DataTable ExecuteDataTable(string fileName, string sql) { OleDbConnection conn = ConnectToDb(fileName); conn.Open(); OleDbDataAdapter tableAdapter = new OleDbDataAdapter(sql, conn); DataTable dt = new DataTable(); tableAdapter.Fill(dt); return dt; } public void ExecuteNonQuery(string fileName, string sql) { OleDbConnection conn = ConnectToDb(fileName); conn.Open(); OleDbCommand command = new OleDbCommand(sql, conn); command.ExecuteNonQuery(); conn.Close(); } public static string printDataTable(string fileName, string sql)//הפעולה מקבלת שם קובץ ומשפט בחירת נתון ומחזירה אמת אם הנתונים קיימים ושקר אחרת { DataTable dt = ExecuteDataTable(fileName, sql); string printStr = "<table border='1'>"; foreach (DataRow row in dt.Rows) { printStr += "<tr>"; foreach (object myItemArray in row.ItemArray) { printStr += "<td>" + myItemArray.ToString() + "</td>"; } printStr += "</tr>"; } printStr += "</table>"; return printStr; } }
Advertisement
Answer
Your insert statement:
string command = "INSERT INTO videos (hero, file) VALUES( '" + hero3 + "','" + x.ConvertFileToByte(path) + "')";
will end up as a SQL statement like this:
INSERT INTO videos (hero, file) VALUES ('Some Hero', 'System.Byte[]')
Because when you concat your byte array like this:
string byteArrayInConcat = "MY BYTES: " + x.ConvertFileToByte(path);
You get this:
MY BYTES: System.Byte[]
SOLUTION:
You should use parameterized queries, both for the sake of security and be able to write a byte[] into the database.
Add this method to your MyAdoHelper
class. To be consistent, I am naming the variables as you did, which normally would not be my choice of naming.
public static int ExecuteNonQuery(string fileName, string sql, Dictionary<string, object> parameters) { using (OleDbConnection conn = ConnectToDb(fileName)) { conn.Open(); using (OleDbCommand com = new OleDbCommand(sql, conn)) { foreach (KeyValuePair<string, object> parameter in parameters) { com.Parameters.AddWithValue(parameter.Key, parameter.Value); } return com.ExecuteNonQuery(); } } }
Then, insert the video using the following code block:
if ((video2.PostedFile != null) && (video2.PostedFile.ContentLength > 0)) { string hero3 = Request.Form["hero3"]; path = MyVideoHelper.SaveFileInFoder(video2.PostedFile, "potg", Server); string command = "INSERT INTO videos (hero, file) VALUES (?, ?)"; Dictionary<string, object> parameters = new Dictionary<string, object>(); parameters.Add("@hero", hero3); parameters.Add("@file", x.ConvertFileToByte(path)); MyAdoHelper.ExecuteNonQuery("omerwatchdb.accdb", command, parameters); }