PowerShell 将大于 2 GB 的文件插入 SQL FileStream-Database

问题描述

我正在尝试将 zip 文件插入 sql server 数据库文件流处于活动状态)。 没问题,当 zip 文件

  1. 无法将参数“0”转换为“2504870328”,将“Int64[]”转换为“system.int32”:“无法将值“2504870328”转换为“system.int32”。错误:“值”要么太大要么太大 对于 Int32 来说很小。""
  2. 使用“0”个参数调用“ExecuteNonQuery”的异常:“无法访问关闭文件。”

我的代码看起来像这样:

    Function Upload-ZIPFile
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [double]$ScriptVersion,[Parameter(Mandatory)]
        [validateset('PS','AdminDB','sqlBinary')]
        [string]$ScriptType,[Parameter(Mandatory)]
        [string]$ZIPFile,[Parameter(Mandatory)]
        [string]$Build
    )

    $checkSum = Get-filehash $ZIPFile
    ## here was the orignal code,works with all files less than 2 GB
    ## [byte[]]$file = [System.IO.File]::ReadAllBytes($ZIPFile)
    $file = New-Object System.IO.Filestream($ZIPFile,[System.IO.FileMode]'Open',[System.IO.FileAccess]'Read')
    $buffer = New-Object long[] -ArgumentList $file.length
    $conn = New-Object System.Data.sqlClient.sqlConnection
    $file.Read($buffer,$buffer.Length)
    $file.Close()
    $conn.ConnectionString = "Server=MyServer\Instance;Database=sql_TEAM;Integrated Security=True"

    $conn.open() | out-null
    $cmd = new-Object System.Data.sqlClient.sqlCommand
    $cmd.Connection = $conn
    $cmd.CommandText = "Insert deployment.softwarerepository(fileID,version_nr,file_typ,datafile,checksum,build) values (NEWID(),$ScriptVersion,'$ScriptType',@insert,@hash,'$Build')"

    $cmd.Parameters.AddWithValue("@insert",$file)
    $cmd.Parameters.AddWithValue("@hash",$checkSum.Hash)
    #
    #exek
    $cmd.ExecuteNonQuery() 
    $conn.Close()
    $conn.dispose()
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)