问题标签 [varbinary]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 如何使用图像字段提高 SQL Server 表的性能?
我在工作中遇到了一个非常特殊的性能问题!
在我们使用的系统中,有一个表格,其中包含有关当前工作流程的信息。其中一个字段包含一个电子表格,其中包含有关该过程的元数据(不要问我为什么!不,我不能改变它!!)
问题是该电子表格存储在 SQL Server 2005 的 IMAGE 字段中(在与 SQL 2000 兼容的数据库集中)。
该表目前有 22K+ 行,甚至是这样的简单查询:
在查询分析器中检索数据需要 30 秒。
我正在考虑更新对 SQL 2005 的兼容性(一旦我被告知该应用程序可以处理它)。
我在想的第二件事是将列的数据类型更改为,varbinary(max)
但我不知道这样做是否会影响应用程序。
我正在考虑的另一件事是使用sp_tableoption
将 设置large value types out of row
为1
当前0
,但我不知道这样做是否会提高性能。
有谁知道如何在这种情况下提高性能?
编辑澄清
我的问题是我无法控制应用程序向 SQL Server 提出的要求,并且我对它进行了一些反思(该应用程序是一个 .NET 1.1 网站)并且它使用了一些我不知道的内部内容的违规字段这是什么。
我需要提高这张表的整体性能。
sql-server - 我可以使用参数化查询从 SQL Server VarBinary 列返回字节数组吗?
我编写了一个小的 VBA 程序来测试使用 ADO 将文件作为二进制数据上传和下载到 SQL Server 中的 VarBinary 列中。上传过程似乎可以正常工作,但我无法让下载过程正常工作。
我相信 VarBinary 的输出参数设置不正确,但我找不到任何有关如何正确执行此操作的文档。
我收到运行时错误 3708“参数对象定义不正确。提供的信息不一致或不完整。” 在线.Parameters.Append .CreateParameter("@myblob", adVarBinary, adParamOutput)
更新:SELECT ? = myblob FROM bin_table WHERE ID = ?;
似乎返回二进制字符串,而不是二进制数组。我相信这就是问题所在,但我仍然不知道如何解决它。
更新.Value
:我通过在行尾添加添加来修复编译错误“类型不匹配:预期的数组或用户定义类型” WriteFile "C:\some_new_file.pdf", .Parameters("@myblob")
。
任何帮助是极大的赞赏。谢谢!
sql-server - 如何在 SQL Server 中搜索 varbinary 字段?
我有一个应用程序允许用户上传文件,主要是 PDF 和 Word 文档。这些文件存储在数据库的 varbinary 字段中。不管用户如何访问应用程序,通过 Web 或 Windows 窗体应用程序或任何其他表示层,我都需要让这些文件可用。
有没有办法搜索这些字段的原始文本内容?例如,如果我上传简历,我希望用户能够搜索 C# 并能够在 varbinary 字段的内容中查找指定的文本。
此外,如果有更好的策略来处理这个问题,我愿意接受。
c# - 将 Linq To Sql 二进制字段设置为 null
尝试将 Binary 字段设置为 null 会给我一个 ArgumentNull 异常。我可以像这样将该字段设置为空,new Binary(new byte[] {});
但这不是空的,只是一个空列。是否有使用 LinqToSql 的解决方法?
mysql - 使用 HIbernate 和 MySQL 从 varbinary 列中检索字符串时出现问题
这是我的场景。我使用 Hibernate 在 MySQL 中保存了一堆包含亚洲字符的字符串。这些字符串写在 varbinary 列中。在保存操作期间一切正常。DB 包含正确的值(字节序列)。如果我查询(再次使用 Hibernate)我保存的字符串,我会得到正确的结果。但是,当 Hibernate 用数据库中的值填充字符串所属的实体时,我得到的值与我在检索它们的查询中使用的值不同。我没有收到正确的值,而是收到一堆 FFFD 替换字符。
例如:如果我将“하늘”存储在数据库中,然后查询它,则生成的字符串将为 \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD。
- DB连接有以下参数设置useUnicode=true&characterEncoding=UTF-8,
我尝试过为 Hibernate 使用以下配置,但这并没有解决问题:
- connection.useUnicode = true
- connection.characterEncoding = UTF-8顺便说一句,如果 MySQL 列是 varchar 类型,这一切都可以正常工作。我错过了什么?有什么建议么?谢谢
sql-server - 从 sql server 中的查询中检索 varbinary 输出到经典 ASP
我正在尝试从 SQL Server 2005 上运行的查询中将 varbinary 输出值检索到 Classic ASP 中。当涉及到将 varbinary 输出转换为字符串的部分代码时,ASP 执行就会失败。所以我想我们必须以其他方式处理它。
实际上,我正在尝试为数据库连接设置 (sp_setapprole) 和取消设置 (sp_unsetapprole) 应用程序角色。首先我设置了approle,然后我运行了我需要的查询,最后取消了approle。在取消设置期间,当我需要 ASP 代码中的 cookie (varbinary) 值时,我可以创建像“exec sp_unsetapprole @cookie”这样的查询。那么在这个阶段,我没有 cookie (varbinary) 值。
我这样做的原因是我在尝试设置应用程序角色时曾经收到“sp_setapprole 未正确调用”错误。我通过将“OLE DB Services = -2;Pooling=False”附加到我的连接字符串中来禁用池。
我知道池有助于提高性能,但在这里我面临着大问题。
请帮助我将 varbinary 值检索到经典 ASP 文件中,或建议一种设置和取消设置应用程序角色的方法。无论哪种方式的解决方案都值得赞赏。
谢谢,南达戈帕尔
c# - Database.ExecuteNonQuery 不返回
我有一个非常奇怪的问题。当我使用 SqlCommand.ExecuteNonQuery 从 C# 执行特定的数据库存储过程时,我的存储过程永远不会执行。
此外,SQL Profiler 根本不注册该命令。我没有收到命令超时,也没有抛出异常。
最奇怪的是,这段代码运行良好超过 1,200,000 次,但对于我插入数据库的这个特定文件,它只是永远挂起。
当我终止应用程序时,我在数据库服务器的事件日志中收到此错误:"A fatal error occurued while reading the input stream from the network. The session will be terminated (input error: 64, output error: 0).
这让我认为数据库服务器正在接收命令,尽管 SQL Profiler 另有说明。
我知道设置了适当的权限,并且连接字符串是正确的,因为这段代码和存储过程可以与其他文件一起正常工作。
下面是调用存储过程的代码,可能需要注意的是我要插入的文件是 33.5MB,但是我添加了超过 10,000 个大于 500MB 的文件,所以我认为大小不是问题:
进行调用的服务器和数据库服务器之间没有防火墙,并且已禁用 windows 防火墙以解决此问题。
php - 通过存储过程发送大型变量的权限 (SQL Server)
我想不出一种方法来允许通过调用存储过程一次接收超过 4000 个字节。我将图像存储在表中,每个图像大约 15 - 20 KB,但是在获取它们并将它们显示到页面时,它们的大小始终为 3.91 KB(或 4000 字节)。
存储过程对一次可以发送多少数据有限制吗?我仔细检查了我的数据,我确实只收到了该varbinary(MAX)
字段的前 4000 个字符。
是否有允许一次超过 4k 字节的权限设置?
sql-server - 从 SQL Server varbinary 列临时检索数据
我想从varbinary(max)
SQL Server 数据库中的列中检索一些二进制数据以进行调试。
将这些数据放入本地二进制文件的最简单方法是什么,最好不必编写一次性控制台应用程序?
我曾尝试使用 SQL Server Management Studio(使用“结果到文件”选项),但这会将十六进制编码的二进制字符串输出到文件,而不是原始二进制数据。
c# - SQL Server:如何将存储在 varbinary(max) 字段中的文件(pdf、doc、txt...)复制到 CLR 存储过程中的文件中?
我问这个问题作为这个问题的后续。
这里发布了一个使用 bcp 和 xp_cmdshell 的解决方案,这不是我想要的解决方案。
我是 c# 的新手(因为我是 Delphi 开发人员)无论如何我都能够按照教程创建一个简单的 CLR 存储过程。
我的任务是将文件从客户端文件系统移动到服务器文件系统(可以使用远程 IP 访问服务器,所以我不能使用共享文件夹作为目标,这就是我需要 CLR 存储过程的原因)。
所以我打算:
- 从 Delphi 将文件存储在临时表的 varbinary(max) 列中
- 调用 CLR 存储过程,使用 varbinary(max) 字段中包含的数据在所需路径创建文件
想象一下,我需要将 C:\MyFile.pdf 移动到 Z:\MyFile.pdf,其中 C: 是本地系统上的硬盘,Z: 是服务器上的硬盘。C 在纽约,Z 在伦敦,它们之间没有 VPN,只有 https 连接。
我提供下面的代码(不工作)有人可以修改以使其工作?在这里,我假设有一个名为 MyTable 的表,其中包含两个字段:ID (int) 和 DATA (varbinary(max))。请注意,如果该表是一个真正的临时表或只是一个我临时存储数据的表,这并没有什么区别。如果有一些异常处理代码,我将不胜感激(这样我就可以管理“无法保存文件”异常)。
我希望能够编写一个新文件或覆盖该文件(如果已经存在)。
(一个子问题是:这种方法是否正确或者有一种方法可以直接将数据传递给 CLR 存储过程,所以我不需要使用临时表?)
如果子问题的答案是否定的,您能描述一下避免使用临时表的方法吗?那么有没有比我上面描述的更好的方法(=临时表+存储过程)?一种将数据流从客户端应用程序直接传递到 CLR 存储过程的方法?(我的文件可以是任意大小,但也可以很大)