标签: varbinary

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())
        {
            command.CommandText = "UPDATE [BLOB] SET [Data].WRITE(@data, @offset, @len) WHERE [Id]=@id";

            SqlParameter dataParam = new SqlParameter("@data", SqlDbType.VarBinary);
            command.Parameters.Add(dataParam);

            SqlParameter offsetParam = new SqlParameter("@offset", SqlDbType.BigInt);
            command.Parameters.Add(offsetParam);

            SqlParameter …
Run Code Online (Sandbox Code Playgroud)

c# sql varbinary sql-update

7
推荐指数
1
解决办法
7123
查看次数

为什么在SQL Server中CONVERT字符串到VARBINARY只转换第一个字符?

我正在使用NLog登录我的应用程序,作为其中一部分,我们记录了客户编号,这是C#中的字符串,以及数据库中的varbinary(32).我对此特定参数使用以下SQL代码.SQL语句的其余部分工作正常:

CONVERT(varbinary(32), @CustNumber)
Run Code Online (Sandbox Code Playgroud)

和以下NLog参数:

<parameter name="@CustNumber" layout="${event-context:item=CustNumber}" />
Run Code Online (Sandbox Code Playgroud)

和C#中的以下代码一起添加Nlog参数:

myEvent.Properties.Add("CustNumber", custNumber);
Run Code Online (Sandbox Code Playgroud)

由于某种原因,存储在实际表中的值仅是原始客户编号字符串的第一个字符.我有双重和三重检查,以确保我没有截断字符串发送到数据库之前.任何帮助将不胜感激.

sql varchar nlog varbinary

7
推荐指数
1
解决办法
2万
查看次数

在 SQL Server 中从 base64 字符串转换为 varbinary(max)

我将 PDF 文档作为二进制存储在我的表中,存储 PDF 字节的列是 type varbinary(max)。我想update在 SQL Studio 中使用更新的文档记录一个记录,我尝试完成此操作的方式如下

UPDATE table
SET file_bytes=CONVERT(varbinary(max),'JVBERi0xLjYNCiW2JqDQo8PC9UeX...0YNCg==') --this is a base64 string
WHERE id='73c75254-ad86-466e-a881-969e2c6e7a04';
Run Code Online (Sandbox Code Playgroud)

查询运行,但是当我尝试下载文档(通过网站)时,它会抛出一条错误消息,内容为 PDF header signature not found.

这种转换甚至可能吗?

sql sql-server pdf base64 varbinary

7
推荐指数
2
解决办法
1万
查看次数

SQL Server 2008上的varbinary(max)文件流的长度

是否有一些有效的方法如何在"varbinary(max)filestream"列中获取数据长度?我发现只有转换为varchar的样本然后调用"LEN"函数.

sql-server filestream varbinary datalength

6
推荐指数
1
解决办法
8770
查看次数

如何使用图像字段提高SQL Server表的性能?

我在工作中遇到了非常特殊的性能问题!

在我们使用的系统中,有一个表格,其中包含有关当前工作流程的信息.其中一个字段包含一个电子表格,其中包含有关该过程的元数据(不要问我为什么!!我不能改变它!)

问题是此电子表格存储在SQL Server 2005的IMAGE字段中(在具有SQL 2000兼容性的数据库集中).

这个表目前有22K +行甚至是这样的简单查询:

SELECT TOP 100 *
  FROM OFFENDING_TABLE
Run Code Online (Sandbox Code Playgroud)

在查询分析器中检索数据需要30秒.

我正在考虑更新与SQL 2005的兼容性(一旦我被告知应用程序可以处理它).

我想的第二件事是将列的数据类型更改为varbinary(max)但我不知道这样做是否会影响应用程序.

我正在考虑的另一件事是使用sp_tableoption设置large value types out of row1,因为它是目前0的,但我没有任何信息,如果这样做将提高性能.

有谁知道在这种情况下如何提高性能?


编辑澄清

我的问题是,我无法控制应用程序向SQL Server提出的问题,我对它做了一些反思(该应用程序是一个.NET 1.1网站),并且它使用了违规字段来处理一些我不知道的内部内容这是什么.

我需要提高这个表的整体性能.

sql-server varbinary imagefield

6
推荐指数
1
解决办法
1万
查看次数

varbinary 到 varchar w/o master.dbo.fn_varbintohexstr

有没有办法在 MS SQL Server 2005 上没有 master.dbo.fn_varbintohexstr 函数的情况下将 varbinary 转换为 ASCII varchar 字符串(base64、md5、sha1 - 不管)?因为它不能在计算列内使用。

CONVERT 和 CAST 返回非 ASCII 字符串。

谢谢,

丹尼斯。

sql varchar sql-server-2005 varbinary

6
推荐指数
1
解决办法
8169
查看次数

对varbinary字段进行MySQL不区分大小写的搜索?

我有一个varbinary字段id喜欢做一个不区分大小写的搜索.

我知道varbinary字段的工作方式禁止你做这样的事情:

WHERE LOWER(page_title) = LOWER("Gasket")
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?我想我可以暂时将该字段作为varchar或其他东西.但我不确定.

mysql search varbinary

6
推荐指数
1
解决办法
3735
查看次数

Oracle 10:使用HEXTORAW填充blob数据

我们在Oracle中有一个表,其中BLOB列需要填充少量任意字节数据 - 我们永远不会输入超过4000字节的数据.

我正在使用现有的基于C++ OCI的基础结构,这使得在某些上下文中使用绑定变量非常困难,因此我需要仅使用简单查询来填充此BLOB列.(我们正在努力使其现代化,但今天不是一种选择,)

我们对这样的查询运气不错:

UPDATE MyTable
   SET blobData = HEXTORAW('0EC1D7FA6B411DA5814...lots of hex data...0EC1D7FA6B411DA5814')
 WHERE ID = 123;
Run Code Online (Sandbox Code Playgroud)

起初,这很有效.但是,最近我们遇到了一个需要输入2000多字节数据的情况.此时,我们遇到了Oracle错误,ORA-01704: string literal too long因为传递给的字符串HEXTORAW超过了4000个字符.我尝试拆分字符串然后连接||,但这并没有避免错误.

因此,我需要一种更新此列的方法,并使用简单的查询将其填充超过2000字节的数据.可能吗?

(我知道如果我拥有绑定变量,那将是微不足道的 - 实际上与该表交互的其他应用程序使用这种确切的技术 - 但不幸的是我无法在这里重构数据库内容.只需要将数据输入表格.)

编辑:

一种没有用的有希望的方法是连接RAW:

UTL_RAW.CONCAT(HEXTORAW('...'), HEXTORAW('...'), HEXTORAW('...'))
Run Code Online (Sandbox Code Playgroud)

这避免了字符串长度限制,但似乎Oracle在a的长度上也有一个匹配的内部2000字节限制RAW.所以我不能用一个填充blob RAW.也许有一个函数可以将多个RAWs 连接成一个BLOB.

sql oracle blob varbinary

6
推荐指数
2
解决办法
8661
查看次数

在 MySQL 中将 UUID 保存为 varbinary(16) 会导致 com.mysql.jdbc.MysqlDataTruncation: 数据截断:第 1 行的列“ID”的数据太长

我有一个字段 id 定义如下。它是数据库中的 varbinary(16),当我通过 JPA 插入新记录时,我得到“com.mysql.jdbc.MysqlDataTruncation:数据截断:第 1 行的列“ID”的数据太长”。我究竟做错了什么?

@Id
@Column(name="ID")
private UUID id;
Run Code Online (Sandbox Code Playgroud)

mysql uuid jpa eclipselink varbinary

6
推荐指数
1
解决办法
7647
查看次数

SQL Server 2008 将 varchar 转换为 varbinary

我尝试使用如下代码将图像数据导入 sql server 2008 db:

INSERT INTO [TAB] (ID_PHOTO,PHOTO)
VALUES(
    CAST('333EFB54-7062-E043-F088-FE0A916C0297' as uniqueidentifier),
    CONVERT(varbinary(max),'0xFFD8FFE000')
)
Run Code Online (Sandbox Code Playgroud)

该字符串只是一个虚拟的,但是当我进行插入时,我在数据库中发现了类似的内容

0x307846464438464645303030
Run Code Online (Sandbox Code Playgroud)

这不是我所期望的。有谁知道我做错了什么?

sql-server type-conversion varbinary

6
推荐指数
2
解决办法
2万
查看次数