You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OLE字段存储视频byte[]数组后无法转换回文件问题求助

问题修复方案

核心错误位置:UploadVideo方法的SQL拼接逻辑
你直接将byte[] file变量拼接入SQL字符串时,C#会自动调用byte数组的ToString()方法,最终存入OLE对象字段的是字符串"System.Byte[]",而非真实的视频二进制数据,所以读取时无法转回正常视频文件。

修复后的UploadVideo方法代码

public void UploadVideo(string hero, string username , byte[] file)
{
    using (OleDbConnection conn = new OleDbConnection(Connect.GetConnectionString()))
    {
        conn.Open();
        try
        {
            // 改用参数化查询,不要直接拼接SQL,file为数据库关键字加[]避免冲突
            string sql = "Insert Into videos(username, hero, [file]) Values(?, ?, ?) ";
            using (OleDbCommand com = new OleDbCommand(sql, conn))
            {
                // OleDb参数按顺序匹配,二进制参数单独指定类型
                com.Parameters.AddWithValue("@p1", username);
                com.Parameters.AddWithValue("@p2", hero);
                OleDbParameter fileParam = new OleDbParameter("@p3", OleDbType.Binary, file.Length);
                fileParam.Value = file;
                com.Parameters.Add(fileParam);
                com.ExecuteNonQuery();
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

额外校验&优化建议

  • 插入完成后可先查询对应记录的file字段长度,如果长度小于100基本可以判定是插入错误,正常视频文件的二进制长度至少在MB级别
  • 你当前的逻辑是先把上传的视频存到服务器本地文件夹,再读成byte数组存入数据库,冗余了一次磁盘IO,可以直接读取HttpPostedFile.InputStream的流转为byte数组,不需要先存本地临时文件
  • 若视频体积普遍较大,不建议存储在数据库中,更推荐将视频存在磁盘/对象存储,数据库仅存储文件路径,读取性能会高很多
  • 读取写入文件的逻辑无需修改,插入逻辑修复后即可正常生成可用的mp4文件

内容的提问来源于stack exchange,提问作者דין ודברים

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 11:00:02