使用C#将PDF作为字节数组插入SQL Server存储过程

本文关键字:插入 数组 SQL Server 存储过程 字节数 字节 PDF 使用 | 更新日期: 2023-09-27 18:21:53

我有一个PDF,需要将它插入SQL Server表的varbinary列中。

我使用C#将PDF转换为字节数组

byte[] bytes = File.ReadAllBytes(fileName);

我在SqlCommand:中添加了一个参数

 SqlParameter fileP = new SqlParameter("@file", SqlDbType.VarBinary);
 fileP.Value = bytes;
 myCommand.Parameters.Add(fileP);

存储过程基本上取一个varbinary参数并插入到表的varbinary列中

 create procedure pdfInsert 
      @file varbinary(MAX)
 as
     insert ...

我在执行此过程时出错。

在SQL Server探查器中,我发现以下过程执行

exec pdfInsert @file = 0x2555... <-- byte array of pdf

错误为

消息102,级别15,状态1,第2行
"40E3"附近的语法不正确。

在SSMS中,当我在两个字节数组上都用单引号执行此过程时。

像这样:

 exec pdfInsert @file = '0x2555.......'

我得到错误:

不允许从数据类型varchar(max)隐式转换为varbinary(max)。使用CONVERT函数运行此查询。

只是想知道我做错了什么?非常感谢您的帮助。感谢

使用C#将PDF作为字节数组插入SQL Server存储过程

此代码适用于我:

private void button1_Click(object sender, EventArgs e)
{
    byte[] bytes = File.ReadAllBytes(@"C:'pdf.pdf");
    SqlParameter fileP = new SqlParameter("@file", SqlDbType.VarBinary);
    fileP.Value = bytes;
    SqlCommand myCommand = new SqlCommand();
    myCommand.Parameters.Add(fileP);
    SqlConnection conn = new SqlConnection(@"Data Source=CoastAppsDev'SQL2008;Initial Catalog=CSharpWinForms;Integrated Security=True;");
    conn.Open();
    myCommand.Connection = conn;
    myCommand.CommandText = "spPdfInsert";
    myCommand.CommandType = CommandType.StoredProcedure;
    myCommand.ExecuteNonQuery();
    conn.Close();
}

使用存储的proc:

Create Procedure [dbo].[spPdfInsert] (
    @file varbinary(max) = null
)
AS

Insert Into Pdfs
(   pdfData )
Values
(   @file )

您使用的SQL Server版本是什么?2008年?

尝试使用而不是"SqlParameter fileP=new SqlParameter("@file",SqlDbType.VarBinary);"

使用此cm.Parameters.AddWithValue("@file",字节);

还要确保列类型是varbinary(max),而不是任何其他数据类型