如何使用SqlParameter.Offset属性和ADO.NET在SQL Server 2012中存储二进制文件

 思铮同学要努力工作 发布于 2023-01-14 15:24
  • php
  • 我目前正在学习如何在SQL Server中不使用varchar(max)上的FILESTREAM属性来存储文件,因为我不需要存储非常大的二进制文件.尽管我想通过它的小块存储二进制数据.我发现的是SqlParameter.Offset属性.以下是来自MSDN的一些信息:

    "Offset属性用于二进制和字符串数据的客户端分块.例如,为了将10MB的文本插入服务器上的列,用户可能会执行10个参数化的1MB块插入,移动Offset的值每次迭代1MB."

    听起来这正是我所需要的,但我对如何使用它感到困惑.我创建了一个非常简单的表,名为BinaryFilesTable(Id,FileData).Id是主键,FileData是varbinary(max).到目前为止,这是我的代码.

    public static void Main(string[] args)
        {
            var fileBytes = File.ReadAllBytes("../../image.jpg");
    
            const string connectionString = @"Server=.; Database=TestDb; Integrated Security=true";
            SqlConnection connection = new SqlConnection(connectionString);
    
            connection.Open();
            using (connection)
            {
                string commandText = "INSERT INTO BinaryFilesTable(FileData) VALUES (@binaryFileData)";
    
                SqlCommand command = new SqlCommand(commandText, connection);
    
                SqlParameter commandParameter = new SqlParameter();
                commandParameter.ParameterName = "@binaryFileData";
                commandParameter.Value = fileBytes;
                commandParameter.SqlDbType = SqlDbType.VarBinary;
                commandParameter.Size = -1; // VarBinary becomes VarBinary(max) if size is set to -1.
                //commandParameter.Offset = ??? How to use it ???
    
                command.Parameters.Add(commandParameter);
    
                command.ExecuteNonQuery();
            }
        }
    

    使用此代码我设法将数据存储在表中,但我不确定它是如何工作的.据我了解,目前二进制数据一次性存储,这就是我想弄清楚如何使用这个Offset属性的原因.我花了几个小时寻找一个教程但没有成功.

    编辑:如果我设置一些值到偏移量我得到以下异常:

    System.ArgumentException:偏移量和长度超出数组的范围,或者计数大于从索引到源集合末尾的元素数.

    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有