将视频存储在数据库中是个坏主意。当您尝试从数据库加载视频时,这将减慢该过程。而不是这样做,您应该将该视频存储在您的硬盘驱动器中,并将该文件路径仅存储在您的数据库中。因此,您可以快速流式传输视频。顺便说一句,如果您想在数据库中存储任何文件而不是使用 MemoryStream 或 FileStream 读取所有字节,那么您可以将这些字节写入数据库。
试试这个代码。
注意:以下代码未编译,可能会给您带来错误。这只是为了了解如何将视频文件存储在数据库中。
string path = @"D:\videos\myvideos.mpeg";
try
{
using (FileStream fsSource = new FileStream(path, FileMode.Open, FileAccess.Read))
{
byte[] bytes = new byte[fsSource.Length];
int numBytesToRead = (int)fsSource.Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to numBytesToRead.
int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);
// Break when the end of the file is reached.
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
SqlCommand Cmd = Connection.CreateCommand();
Cmd.CommandText = "Insert Into MyTable(ID,Video,FileName,Format,Size)Values(@ID,@Video,@FileName,@Format,@Size)";
Cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 1;
Cmd.Parameters.Add("@Video", SqlDbType.VarBinary).Value = bytes;
Cmd.Parameters.Add("@FileName", SqlDbType.Varchar).Value = "My File Name";
Cmd.Parameters.Add("@Format", SqlDbType.Varchar).Value = "MPEG";
Cmd.Parameters.Add("@Size", SqlDbType.Int).Value = bytes.length;
Cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}