使用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函数运行此查询。
只是想知道我做错了什么?非常感谢您的帮助。感谢
此代码适用于我:
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),而不是任何其他数据类型