Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#打开特定的pdf页面,从sql获取数据_C#_Sql_Pdf - Fatal编程技术网

c#打开特定的pdf页面,从sql获取数据

c#打开特定的pdf页面,从sql获取数据,c#,sql,pdf,C#,Sql,Pdf,在我的项目中,我想打开一个特定的pdf页面。我从stackoverflow中找到了一个代码,这个代码非常有用 private void button1_Click(object sender, EventArgs e) { startInfo.FileName = @"C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"; startInfo.Arguments = "/A \"page=3\" \

在我的项目中,我想打开一个特定的pdf页面。我从stackoverflow中找到了一个代码,这个代码非常有用

private void button1_Click(object sender, EventArgs e)
{
    startInfo.FileName = @"C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe";
    startInfo.Arguments = "/A \"page=3\" \"C:\\Users\\test.pdf";
    Process.Start(startInfo);
} 
然而,当我想从sql中获取
startInfo.Arguments的
数据时,这段代码在c中工作得非常好,它只打开了我用
按钮1\u单击
打开的最后一页

这就是我试图用sql获取数据的方式

SqlCommand sqlCmd = new SqlCommand("Select * From table ", baglanti);
baglanti.Open();
SqlDataReader reader = sqlCmd.ExecuteReader();
try
{
    while (reader.Read())
    {
        if (reader[1].ToString() == "pdf")
        {
            startInfo.FileName = @reader[4].ToString();
            startInfo.Arguments = reader[3].ToString();
            Process.Start(startInfo);
        }           
    }

    baglanti.Close();
    reader.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message.ToString());
}
另一件事是在我打开一个特定的pdf页面后,比如用按钮打开第15页,然后我想从windows打开pdf,通常它也会从第15页打开。这就好像我用了它之后就无法处理这个争论


那么,有人知道这个问题吗?或者有人能看出我错在哪里吗?

当我在测试应用程序中使用它时,您的代码工作正常。我现在从您的评论中注意到,在
/
a
之间的参数中有一个空格。删除它并确保PDF的路径正确(数据库行中没有双转义序列或类似的内容)。因此,要使其正常运行,您的输出应如下所示:

reader[1]: "pdf"
reader[3]:  "/A \"page=1\" \"C:\\Users\\dzcgkv\\Desktop\\Kiosk\\EOP-HPV_006_DHPV_HİDROLİK_MONTAJ.pdf\""
reader[4]: "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\FoxitReader.exe"

当我在测试应用程序中使用您的代码时,它运行良好。我现在从您的评论中注意到,在
/
a
之间的参数中有一个空格。删除它并确保PDF的路径正确(数据库行中没有双转义序列或类似的内容)。因此,要使其正常运行,您的输出应如下所示:

reader[1]: "pdf"
reader[3]:  "/A \"page=1\" \"C:\\Users\\dzcgkv\\Desktop\\Kiosk\\EOP-HPV_006_DHPV_HİDROLİK_MONTAJ.pdf\""
reader[4]: "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\FoxitReader.exe"

调试读卡器时,读卡器的输出是什么?设置一个断点,一步一步地遍历代码,看看你得到了什么输出。reader[4]是C:\ProgramFiles(x86)\Foxit Software\Foxit reader\FoxitReader.exe reader[3]是“/a\”page=1\“\”C:\\Users\\dzcgkv\\Desktop\\Kiosk\\EOP-HPV\u 006\u DHPV\u H\304; DROL\304; K\MONTAJ.pdf“但是它仍然会打开第3页,原因是button1\u click如果您将sql代码移动到button click事件,它会在第3页还是在最后一页打开?”?请注意,您的参数末尾缺少
\“
。您的字符串看起来像
\”C:\\Users...MONTAJ.pdf
。在
.pdf
之后,您缺少了
\”
。就像
.pdf\“
一样。阅读器[3]是/A\'page=1\“\'C:\\Users\\dzcgkv\\Desktop\\Kiosk\\EOP-HPV\u 006İDHPVİDROLİKİKİMONTAJ.pdf\”这是正确的。我在表格中添加了last\我自己,否则程序无法找到文档。这是button_1Click的参数和我从sql获取的参数数据之间的唯一区别。请确保sql表中的条目没有转义序列。如果您向表中添加一个条目,例如
\“page=2\”
,它将自动向表中再添加两个反斜杠。所以它应该是
\\“page=2\\”
。我刚刚用您的代码创建了一个测试应用程序,并为数据库添加了一些值。它工作得很好。确保您的行输入正确(请与MSSQL Management Studio或任何其他DB应用程序进行检查)。或者只需使用
消息框
检查结果。例如
MessageBox.Show(reader[3].ToString()
。调试读取器时,读取器的输出是什么?设置一个断点并逐步遍历代码,查看您得到的输出。读取器[4]是C:\Program Files(x86)\Foxit Software\Foxit reader\FoxitReader.exe读取器[3]是“/a\”页面=1\”C:\\Users\\dzcgkv\\Desktop\\Kiosk\\EOP-HPV_006_DHPVİDROLİKİKİMONTAJ.pdf“但它仍然会打开第3页按钮1的原因如果将sql代码移动到按钮单击事件,它会在第3页或最后一页打开?请注意,您的参数末尾缺少
\”
。您的字符串看起来像
\“C:\\Users…….MONTAJ.pdf
.After
.pdf
您缺少了
\”
.Like
.pdf\”
.reader[3]是/A\'page=1\“\\C:\\Users\\dzcgkv\\Desktop\\Kiosk\\EOP-HPV\u DHPV\H\304; DROL\K\MONTAJ.pdf\”这是正确的。我在我的表格中添加了最后一个\我自己,否则程序找不到文档。这是button\u 1Click的参数和我从sql中获取的参数之间的唯一区别。确保sql表格中的条目没有转义序列。如果向表格中添加条目,例如
\“page=2\”
它将自动向其添加两个反斜杠。因此它将是
\\\“page=2\\”
。我刚刚用您的代码创建了一个测试应用程序,并向数据库添加了一些值。它工作正常。确保您的行条目正确(请与MSSQL Management Studio或任何其他数据库应用程序一起检查)。或者只需使用
MessageBox
检查结果。例如
MessageBox.Show(reader[3].ToString()
)。