C# 为什么Crystal Report Viewer总是要求提供登录详细信息以访问WePOS操作系统上的数据库? 我使用Clinux报告链接到一个Access数据库席上写了一篇报告:C:\MyDATa.
该报告只有一个字段(本例中为简化字段),没有子报告 我使用C#.NET4使用了表单和WPF Cyrtsal报表查看器 该报告在运行Windows XP的我的开发PC上以及在同样运行Windows XP的其他“TILL”上成功查看。 但是,在运行WePOS(一种简化的Windows XP)的机器上,报告“始终”显示一个对话框,询问登录详细信息,即用户名和密码。 此对话框还显示C:\MyData.mdb的正确路径 我花了很多天在这上面,用各种可能的方法进行测试(我相信每个人都记得这样的时刻!) 我使用此代码确保数据库正确链接到:C# 为什么Crystal Report Viewer总是要求提供登录详细信息以访问WePOS操作系统上的数据库? 我使用Clinux报告链接到一个Access数据库席上写了一篇报告:C:\MyDATa.,c#,ms-access,crystal-reports,C#,Ms Access,Crystal Reports,该报告只有一个字段(本例中为简化字段),没有子报告 我使用C#.NET4使用了表单和WPF Cyrtsal报表查看器 该报告在运行Windows XP的我的开发PC上以及在同样运行Windows XP的其他“TILL”上成功查看。 但是,在运行WePOS(一种简化的Windows XP)的机器上,报告“始终”显示一个对话框,询问登录详细信息,即用户名和密码。 此对话框还显示C:\MyData.mdb的正确路径 我花了很多天在这上面,用各种可能的方法进行测试(我相信每个人都记得这样的时刻!) 我使
TableLogOnInfo logonInfo;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in report.Database.Tables)
{
logonInfo = table.LogOnInfo;
logonInfo.ConnectionInfo.ServerName = string.Empty;
logonInfo.ConnectionInfo.DatabaseName = "C:\MyData.mdb";
logonInfo.ConnectionInfo.UserID = string.Empty;
logonInfo.ConnectionInfo.Password = string.Empty;
table.ApplyLogOnInfo(logonInfo);
}
。。。它可以在每台装有Windows XP的电脑上运行,除了装有WePOS的电脑
我还玩过:
report.SetDatabaseLogon(string.Empty, string.Empty, "C:\MyData.mdb", string.Empty);
。。。但这没什么区别
我只能断定WePOS是如此“被切断”,以至于Crystal无法通过身份验证。。。请帮忙 这个WePos东西是否具有从文件系统中的文件夹/位置读取的正确权限,或者您是否需要提升权限或从这个位置读取的内容。连接到远程网络文件夹时可能会出现相同的问题。然后,您还必须指定该计算机上的凭据才能访问它。这有意义吗?
Public Sub-giveLogin()
Public Sub giveLogin()
Dim conInfo As New ConnectionInfo
conInfo.ServerName = ConfigurationManager.AppSettings("ServerName")
conInfo.DatabaseName = ConfigurationManager.AppSettings("DatabaseName")
conInfo.UserID = ConfigurationManager.AppSettings("UserID")
conInfo.Password = ConfigurationManager.AppSettings("Password")
For Each tblLogon As TableLogOnInfo In CrystalReportViewer1.LogOnInfo
tblLogon.ConnectionInfo = conInfo
Next
End Sub
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" HasCrystalLogo ="False" EnableDatabaseLogonPrompt ="false" EnableParameterPrompt ="false" />
Dim conInfo作为新连接信息
conInfo.ServerName=ConfigurationManager.AppSettings(“ServerName”)
conInfo.DatabaseName=ConfigurationManager.AppSettings(“DatabaseName”)
conInfo.UserID=ConfigurationManager.AppSettings(“UserID”)
conInfo.Password=ConfigurationManager.AppSettings(“密码”)
对于CrystalReportViewer1.LogOnInfo中的每个tblLogon作为TableLogOnInfo
tblLogon.ConnectionInfo=conInfo
下一个
端接头
仅供将来参考,如果您切换到SQL Server,您将希望使用SQL OLEDB而不是本机SQL客户端,否则您将再次遇到与我第一次将CR集成到我们的应用程序时相同的问题。它将在您的开发机器上工作良好,但在生产中不适用。 > P>在水晶报表席(可能在所有版本中我都会想象),我把数据库类型从Access /Excel(DAO)改为OLE DB(ADO)。
我敢打赌,如果我坚持的话,我可以将System.mdw
的位置设置为与C#code中的报表数据源位置相对应的位置(见上文),如David所示
非常感谢David为这个异常“利基”问题的原因提供了一流的指导——我希望它能帮助其他人
代表添加。这对我很有用
var rd = new CrystalReport1();
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.DatabaseName = @"d:\testing\test2.mdb";
connectionInfo.UserID = "admin";
foreach (Table table in rd.Database.Tables)
{
TableLogOnInfo logonInfo = table.LogOnInfo;
logonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(logonInfo);
}
crystalReportViewer1.ReportSource = rd;
“Access数据库上没有用户名或密码”不是真的。每个Jet数据库(MDB格式)都有一个默认的管理员用户名,可以有密码也可以没有密码。问题是在这个精简的Windows安装中是否有一个工作组文件,以及是否在注册表中定义了一个正确定义的默认工作组。你应该能够提供用户名“管理员”,它应该工作。但是如果没有工作组文件,或者它不在注册表中为此定义的位置,它将永远不会工作。嗨,大卫,谢谢你的回复。我检查了注册表(HKEY\U CURRENT\U USER\Software\Microsoft\Office\11.0\Access\Jet\4.0\Engines SystemDB=Application Data\Microsoft\Access\System.mdw)并检查了System.mdw文件,在所有3台PC上都存在。由于这种情况是Crystal Access的一个问题,我不确定是否会涉及工作组文件,因为在打开Access.mdb文件时,它似乎仅由Access本身使用。我坚持默认的“管理员”密码,并随后尝试在所有3台电脑上使用该密码,但没有成功。如果您注册了一个帐户,您将能够留下评论和编辑您的帖子。如果您使用的是带有Crystal Reports的MDB文件,则使用工作组文件。这就是关键所在,这就是Jet/ACE的工作方式。您始终以默认管理员用户或其他用户的身份登录。如果您在登录时遇到错误,那么您需要检查是否有适当的工作组文件和正确的用户名/密码对。从“admin”开始,没有密码是开始故障排除的地方。