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);
}