从数据库中获取PDF文件,并在Windows窗体C#上显示

时间:2018-06-22 07:13:28

标签: c# winforms pdf

我想使用其位置从数据库中获取PDF文件,并将其显示在我的表单应用程序上。我观看了许多Youtube视频,但没有一个能解决我的问题。我可以尝试用哪种其他方式?

string f = comboBox2.Text;
string qu = "SELECT location FROM attachments WHERE name='" + f + "'";

SqlCommand com = new SqlCommand(qu, con);
SqlDataReader reader = com.ExecuteReader();

while (reader.Read())
{
    var input = reader["location"].ToString();
    this.axAcroPDF1.LoadFile(input);
}

我的数据库表看起来像

CREATE TABLE [dbo].[attachments]  
(
    [Id]       INT           IDENTITY (1, 1) NOT NULL,
    [idno]     INT           NULL,
    [name]     VARCHAR (MAX) NULL,
    [location] VARCHAR (MAX) NULL
);

关于此问题,我从任何视频中都没有得到任何帮助。有什么建议可以改善此代码吗?

1 个答案:

答案 0 :(得分:0)

将位置字段更改为VarBinary。

CREATE TABLE [dbo].[attachments] (
[Id]       INT           IDENTITY (1, 1) NOT NULL,
[idno]     INT           NULL,
[name]     VARCHAR (MAX) NULL,
[location] VARBINARY (MAX) NULL
);

如果LoadFile方法接受字节数组,请使用字节数组,否则写入磁盘...

string f = comboBox2.Text;
string qu = "SELECT location FROM attachments WHERE name=@name";

SqlCommand com = new SqlCommand(qu, con);
com.Parameters.Add(new SqlParameter("@name", f);
SqlDataReader reader = com.ExecuteReader();

while (reader.Read())
{
    var file = (byte[])reader["location"];
    this.axAcroPDF1.LoadFile(file);
    //else use a method like 'File.WriteAllBytes(file);'
}