【问题标题】:how to store and retrieve video in database with C# winforms?如何使用 C# winforms 在数据库中存储和检索视频?
【发布时间】:2014-09-06 10:45:58
【问题描述】:

我有一个带有 C# 的 Windows 应用程序,我具有用户可以在他们的数据中添加和检索视频文件的功能
如何使用 C# winforms 在数据库中存储和检索视频? 有什么办法可以解决这个问题。
谢谢你的帮助。

【问题讨论】:

  • 在数据库中存储像视频这样的大文件不是一个好主意,将文件名存储在数据库中以供参考和目录中的文件
  • 视频非常小,大约 2 或 3 MB

标签: c# winforms video data-retrieval


【解决方案1】:

将视频存储在数据库中是个坏主意。当您尝试从数据库加载视频时,这将减慢该过程。而不是这样做,您应该将该视频存储在您的硬盘驱动器中,并将该文件路径仅存储在您的数据库中。因此,您可以快速流式传输视频。顺便说一句,如果您想在数据库中存储任何文件而不是使用 MemoryStreamFileStream 读取所有字节,那么您可以将这些字节写入数据库。

试试这个代码。

注意:以下代码未编译,可能会给您带来错误。这只是为了了解如何将视频文件存储在数据库中。

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

【讨论】:

  • 插入没有问题。我的问题是当用户想要将文件存储在特定路径中时进行检索。
  • @Shell 我不确定说在数据库中存储视频是一个坏主意是否正确。我知道至少三个企业内容管理系统 (eCMS) 将视频存储在数据库中并将其缓存以进行流式传输。 Vimeo 使用 MySQL 存储视频 (davidwalsh.name/vimeo)。
猜你喜欢
  • 2016-12-19
  • 2020-07-23
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
相关资源
最近更新 更多