从VS 2008升级到VS 2010后出现“数据库登录失败”错误

时间:2012-10-31 20:42:07

标签: c# visual-studio-2010 crystal-reports

我有一个用VS 2008 for .net 2编写的应用程序,升级到VS 2010并为.net 4构建。在这个应用程序中是一个Crystal Report。报告应该完全没有数据库交互。我从项目中的一个对象手动设置各种ITextObject字段。

示例:

            to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbName"];
            to.Text = visitor.first + " " + visitor.last;

            to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbCompany"];
            to.Text = visitor.company;

其中visitor是我从中提取数据的类。

同样,应该完全没有与此报告进行数据库交互,但是,它以某种方式认为它应该击中数据库。

这是相关的堆栈跟踪: CrystalDecisions.ReportAppServer.DataSetConversion

编辑:当我拨打.PrintToPrinter(1, false, 1, 0);

时,它正在爆炸

*编辑/更新* 我戳了app.config文件,发现了这个小块

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

在应用程序中,我的报告打印出来。随着它的评论,它爆炸了......

编辑3:

更多源代码:

 cryBadge crystalPrint = new cryBadge();
 crystalPrint.ReportOptions.EnableSaveDataWithReport = false;

 //NOTE: pi is an internal object used to find printer information.
 crystalPrint.PrintOptions.PrinterName = pi.PrinterName;
 numSize = pi.FindPaperSizeIndex(height, wid);
 to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbName"];
            to.Text = visitor.first + " " + visitor.last;

 to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbCompany"];
 to.Text = visitor.company;
 crystalPrint.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape;
 crystalPrint.PrintToPrinter(1, false, 1, 0);

2 个答案:

答案 0 :(得分:0)

例如,如果我想使用Crystal Reports打印报告,我会执行以下操作

基于您的示例

.PrintToPrinter(1, false, 1, 0);

您可能想尝试重构代码,这是一个示例

ReportDocument rd = new ReportDocument();
// Insert code to run the report here

// This gets the user's default printer to print to.
PrintDialog prt = new PrintDialog();
rd.PrintOptions.PrinterName = prt.PrinterSettings.PrinterName; 
// This does the printing.
rd.PrintToPrinter(copies, true, 1, 1000); 

一个可以在下面尝试的工作示例..

//Note untested
PrintDialog pDialog = new PrintDialog();

Nullable<Boolean> print = pDialog.ShowDialog();
if (print == true)
{
    string value1 = "This is a Test";
    string value2= "Happy Halloween";
    ReportDocument rd = new ReportDocument();
    rd.Load("ReportFile.rpt");
    rd.SetParameter("Parameter1", value1);
    rd.SetParameter("Parameter2", value2);
    rd.PrintOptions.PrinterName = pd.PrinterSettings.PrinterName;
    rd.PrintToPrinter(1, false,0,0);
}

答案 1 :(得分:0)

好的。想出来了。

我必须在app.config文件中输入这段代码:

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

然后确保配置文件保留.exe例如,如果应用程序名为“TestApp1”,则输出文件夹中应该有一个TestApp1.exe.config文件。该.config文件需要保留在应用程序中。