Tag: varbinary

如何将C#中的byte 作为字符串传递给SQL Server存储过程并转换为varbinary(MAX)

在这个项目中,有一个包装ADO.NET以进行常见数据访问的类,如ExecuteDataReader , ExecuteScalar等。 使用这些方法调用存储过程时,它允许您传递Dictionary参数(字符串键,字符串值),然后将其作为SqlParameter添加到SqlCommand对象中。 有一种情况我们必须在数据库中保存文档。 该文档是byte[] ,数据库中的相应列是varbinary(MAX) 。 我们已经四处寻找解决方案,但所有可用的都是使用SqlDbType.Varbinary示例,在这种情况下这不是一个选项。 我们最近的尝试是尝试将byte[]转换为二进制字符串,将其作为nvarchar(max)传递给存储过程,然后在将其保存到Document表时使用CONVERT(varbinary(max), @theFileBinaryString) ,但是,这会保存损坏的文件。 C# byte[] pDocumentBytes = …; string documentAsBinary = “0x” + BitConverter.ToString(pDocumentBytes).Replace(“-“, “”); SQL @DocumentContentAsBinary nvarchar(max) — This is “documentAsBinary” from C# above DECLARE @DocumentContentVarbinary varbinary(max); SET @DocumentContentVarbinary = CONVERT(varbinary(max), @DocumentContentAsBinary);

System.OutOfMemoryException – 当Entity Framework查询Varbinary类型的过大数据时

我正在尝试查询包含文件(1,2 Gb)的varbinary列。 我正在使用entity framework。 见下文: 要测试的数据库 CREATE TABLE [dbo].[BIGDATA] ( [id] [bigint] IDENTITY(1,1) NOT NULL, [BIGDATA] [varbinary](max) NULL, CONSTRAINT [PK_BIGDATA] PRIMARY KEY CLUSTERED ([id] ASC) ) ON [PRIMARY] 要测试的数据(任何1 Gb的文件) INSERT INTO [dbo].[BIGDATA]([BIGDATA]) VALUES ((SELECT BulkColumn FROM OPENROWSET(BULK N’C:\BigTest.txt’, SINGLE_BLOB) AS Document)) 控制器下载文件 public FileResult Download() { try { var context = new Models.ELOGTESTEEntities(); var […]

SQL:在VarBinary列上按顺序执行UPDATE .WRITE

我正在尝试创建一个小的测试应用程序,它读取FileStream的块并将其附加到SQL Server 2005 Express上的VarBinary(max)列。 一切正常 – 列应该按照它应该填充,但我的机器似乎仍然将所有内容缓冲到内存中,我只是看不清楚原因。 我正在使用以下代码(C#): using (IDbConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[1].ConnectionString)) { connection.Open(); string id = Guid.NewGuid().ToString(); using (IDbCommand command = connection.CreateCommand()) { command.CommandText = “INSERT INTO [BLOB] ([Id],[Data]) VALUES (@p1,0x0)”; SqlParameter param = new SqlParameter(“@p1”, SqlDbType.VarChar); param.Value = id; command.Parameters.Add(param); command.ExecuteNonQuery(); } if (File.Exists(textBox1.Text)) { using (IDbCommand command = connection.CreateCommand()) { […]

在C#中从SQL Server流式传输VARBINARY数据

我正在尝试使用ASP.Net提供存储在数据库中VARBINARY(MAX)字段中的图像数据。 现在,代码填充数据表,然后将字节数组拉出DataRow并将字节数组推送到响应中。 我想知道是否有办法将数据从SQL Server或多或少地流式传输到响应中,而不必编组这些巨大的字节数组(因为图像很大,它们会导致OutOfMemoryExceptions)。 那有一个类/机制吗? 当前代码看起来或多或少像: DataTable table = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(commandText, connectionString); adapter.Fill(table); DataRow row = table.Rows[0]; byte[] imageData = row[0] as byte[]; if(imageData != null) { Response.Clear(); Response.BinaryWrite(imageData); Response.End(); } 在此先感谢 – 任何帮助表示赞赏。