Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Perl脚本将BLOB插入MS SQL数据库_Sql_Perl_Blob - Fatal编程技术网

使用Perl脚本将BLOB插入MS SQL数据库

使用Perl脚本将BLOB插入MS SQL数据库,sql,perl,blob,Sql,Perl,Blob,请原谅我对Perl的无知,因为我是一名.NET开发人员(我已经听到你们所有人的唾沫和诅咒;) 我们需要使用Perl脚本将BLOB(+一些其他数据)插入MS-SQL数据库(我们的后端系统在AIX上运行,使用Perl脚本处理日常事务) 我们的Perl家伙似乎遇到了一个问题:他可以插入MS-SQL服务器(我们讨厌的.NETers使用)的最大BLOB是64k,但我们需要Perl脚本来插入2MB-6MB的BLOB 如果可以插入超过64k的斑点;有谁能建议我们的Perl人员可以通过什么途径进行调查以实现这一

请原谅我对Perl的无知,因为我是一名.NET开发人员(我已经听到你们所有人的唾沫和诅咒;)

我们需要使用Perl脚本将BLOB(+一些其他数据)插入MS-SQL数据库(我们的后端系统在AIX上运行,使用Perl脚本处理日常事务)

我们的Perl家伙似乎遇到了一个问题:他可以插入MS-SQL服务器(我们讨厌的.NETers使用)的最大BLOB是64k,但我们需要Perl脚本来插入2MB-6MB的BLOB

如果可以插入超过64k的斑点;有谁能建议我们的Perl人员可以通过什么途径进行调查以实现这一点

很抱歉“通过代理”提问,但我们的Perl专家正在度假

提前感谢,


JD

如果这是
DBI
,您可以将数据库句柄的最大缓冲区设置为所需的限制:

$dbh->{LongReadLen} = 10485760;  # 10 MB

DBI
FAQ:

如何使用DBI处理BLOB数据?

使用DBI处理BLOB数据非常困难 非常直截了当。水滴柱 在SELECT语句中指定为 每个普通列。但是你也 需要指定最大BLOB大小 数据库句柄可以 使用LongReadLen属性获取

例如:

### $dbh is a connected database handle
$sth = $dbh->prepare( "SELECT blob_column FROM blobby_table" );
$sth->execute; would fail.

### $dbh is a connected database handle
### Set the maximum BLOB size...
$dbh->{LongReadLen} = 16384;        ### 16Kb...Not much of a BLOB!
$sth = $dbh->prepare( "..." );
如果没有专栏,他会成功 值大于指定的值 价值观

如果BLOB数据长于 LongReadLen的值,然后是一个错误 将会发生。然而,DBI提供了 另一项功能 这将自动截断 已获取大小为的BLOB 如果更长,则为LongReadLen。确实如此 不会导致错误发生,但可能 使获取的BLOB数据无效

这种行为受法律的管制 LongTruncOk属性是 默认设置为假值(因此 使过长的BLOB获取失败)

BLOB数据的截断可能不是一个简单的过程 如果一个水滴 包含运行长度编码数据,但 末尾包含校验和的数据, 例如,一个ZIP文件 变得无用


要插入BLOB,通常需要使用占位符。使用占位符准备语句,然后按如下方式绑定要插入的值:

$statement->bind_参数(?,$myvalue,DBI::SQL_BLOB)

哪里??是占位符的位置,从1开始。然后像往常一样执行语句,例如:

$statement->execute()


和往常一样,错误处理是一个很好的计划。我们在SQLite中经常使用这种方法,但我很确定这对于MSSQL和MySQL也是正确的

哪个Perl模块被用来插入blob?我认为它是DBX(虽然,不是Perl开发人员,我可能是错的),我很遗憾我是一个.net的家伙谢谢,我是扎伊德。相同的过程(LongReadLen的设置)是否也会影响插入的BLOB的插入大小?@jdoig:Good point
LongReadLen
不会影响插入。只有选择。引用文档:
…INSERT语句的最大大小通常有限制,quote方法通常无法处理二进制数据。
如果可能,最好是手动更改数据库设置。感谢Zaid,DB可以在我们从.NET代码读写BLOB时处理BLOB。问题可能在于连接方法(我不知道DBIAPI)或脚本中的一些错误。@jdoig:看看是否可以通过DB设置增加
INSERT
缓冲区的大小。
### Set BLOB handling such that it's 16Kb and can be truncated
$dbh->{LongReadLen} = 16384;
$dbh->{LongTruncOk} = 1;