【问题标题】:Cannot create a row of size 8091 which is greater than the allowable maximum row size of 8060无法创建大于允许的最大行大小 8060 的大小为 8091 的行
【发布时间】:2017-10-16 08:43:27
【问题描述】:

我想将文件保存到我的 SQL Server;列类型为varbinary(max)

当我尝试保存时,出现错误:

无法创建大于允许的最大行大小 8060 的大小为 8091 的行。

这是代码

Using fs As New IO.FileStream(OpenFileDialog2.FileName, IO.FileMode.Open, IO.FileAccess.Read)
    If fs.Length <= Int32.MaxValue Then
        Dim bytes(CInt(fs.Length - 1)) As Byte
        fs.Read(bytes, 0, CInt(fs.Length))

        Dim docfile As New SqlParameter("@d39", SqlDbType.VarBinary)
        docfile.Value = bytes

        cmd.Parameters.Add(docfile)
    End If
End Using

来自 OP 的评论:表架构:

CREATE TABLE [dbo].[empolyee] (
    [Emp_code] [int] NOT NULL
    ,[arabicname] [nchar](250) NOT NULL
    ,[worktime] [nvarchar](250) NULL
    ,[filedata] [varbinary](max) NULL
    ,CONSTRAINT [PK_empolyee] PRIMARY KEY CLUSTERED ([Emp_code] ASC) WITH (
        PAD_INDEX = OFF
        ,STATISTICS_NORECOMPUTE = OFF
        ,IGNORE_DUP_KEY = OFF
        ,ALLOW_ROW_LOCKS = ON
        ,ALLOW_PAGE_LOCKS = ON
        ) ON [PRIMARY]
    ) ON [PRIMARY] GO

【问题讨论】:

标签: sql-server vb.net


【解决方案1】:

通过 FileData 列的名称,我认为您试图将文件存储在数据库中。

如果正确,请将列类型更改为 blob。

TINYBLOB    L+1 bytes, where L < 28     256 bytes
BLOB        L+2 bytes, where L < 216    65 kilobytes
MEDIUMBLOB  L+3 bytes, where L < 224    16 megabytes
LONGBLOB    L+4 bytes, where L < 232    4 gigabytes

如果您要管理大文件,您还需要检查您的 sql 配置的最大数据包大小,否则在尝试存储大文件时会出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多