2012-10-31 86 views
0

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

实施例:

  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);

*编辑/ UPDATE * 我捅到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); 
+0

为什么不尝试将项目从.net 4.0降级到3.5重新编译它,看看它是否工作..如果它这样做告诉我,CrystalReports大会可能不支持版本4.0尝试查阅文档,看看支持哪些版本。 。您可能需要升级到更高版本的.dll和/或程序集。 – MethodMan

+0

好吧,现在它在不同的地方爆炸了。 'crystalPrint.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape;'它抛出了一个'System.Reflection.TargetInvocationException'如果我在.net 3中,看起来我不能设置纸张方向。5 – CurtisHx

+0

这听起来像你可能有一些额外的或隐藏的问题,根据你发布的代码示例无法确定..你可以发布支持当前错误的相关代码示例.. – MethodMan

回答

0

好吧。弄清楚了。

我在这个代码块进入app.config文件:

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

然后确保配置文件保持与.exe文件。例如,如果应用程序名为“TestApp1”,有应该是输出文件夹中的TestApp1.exe.config文件。该.config文件需要与应用程序保持一致。

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); 
} 
相关问题