如何防止水晶报表中的数据库登录窗口?
Posted
技术标签:
【中文标题】如何防止水晶报表中的数据库登录窗口?【英文标题】:How to prevent database login window in crystal report? 【发布时间】:2013-07-23 00:08:37 【问题描述】:我正在开发一个 Windows 应用程序并在其中使用 Crystal Report(我是 Crystal 报告的新手),我面临的问题是,当我在第一次加载时测试报告时它工作正常,但是当我尝试刷新报告时它给我数据库登录窗口,有没有办法阻止这个窗口?以及如何使用代码设置报表的连接字符串?
注意事项: 1-我试过了
private void crystalReportViewer1_ReportRefresh(object source, CrystalDecisions.Windows.Forms.ViewerEventArgs e)
Myreport.SetDatabaseLogon("username", "password", "server", "dbname", false);
但我仍然得到数据库登录窗口。
2-我使用水晶报表拖放来创建我的报表。
3-这是一个 windows 应用程序和 sql server 2008 数据库 C# 是编程语言。
应用程序中的 4 个服务器可能在也可能不在同一台电脑上。
【问题讨论】:
【参考方案1】:我遇到了类似的问题。 SetDatabaseLogon 函数对我不起作用,因此我必须手动将连接详细信息分配给报告中的每个表。我认为该函数是为 SQL Server 设计的(我使用的是 Sybase ASE),但您可能遇到与我相同的问题。
ConnectionInfo connInfo = new ConnectionInfo();
connInfo.ServerName = "Driver=Adaptive Server Enterprise;Server=x.x.x.x;Port=x;";
connInfo.DatabaseName = "dbname";
connInfo.UserID = "username";
connInfo.Password = "password";
TableLogOnInfo tableLogOnInfo = new TableLogOnInfo();
tableLogOnInfo.ConnectionInfo = connInfo;
foreach(Table table in reportDoc.Database.Tables)
table.ApplyLogOnInfo(tableLogOnInfo);
table.LogOnInfo.ConnectionInfo.ServerName = connInfo.ServerName;
table.LogOnInfo.ConnectionInfo.DatabaseName = connInfo.DatabaseName;
table.LogOnInfo.ConnectionInfo.UserID = connInfo.UserID;
table.LogOnInfo.ConnectionInfo.Password = connInfo.Password;
// Apply the schema name to the table's location
table.Location = "dbo." + table.Location;
很明显,您的 connInfo.ServerName 会有所不同,但我已经包含了我用于其他任何人都遇到同样问题但在 ASE 上的模式。
希望这会有所帮助。
【讨论】:
感谢您的回答,我会尝试并告诉您是否有效,再次感谢 非常感谢它部分工作,我的意思是它在数据库登录窗口中更改了服务器名称和数据库名称,但窗口仍然显示要求输入密码,是否有解决方案? 它现在工作了,我也忘了把它放在负载中,这就是问题,非常感谢:-D 快乐的舞蹈很高兴我能帮上忙【参考方案2】:private void button1_Click(object sender, EventArgs e)
DataTable dt = new DataTable();
dt = selectallrecord();
CrystalReport1 cr1 = new CrystalReport1();
cr1.SetDataSource(dt);
crystalReportViewer1.ReportSource = cr1;
public DataTable selectallrecord()
Connection c = new Connection();
//c.main();
if (c.cn.State == ConnectionState.Open)
c.cn.Close();
c.cn.Open();
DataSet DS = new DataSet();
string USER = "";
USER = "SELECT * FROM StudentInfo";
SqlDataAdapter DA = new SqlDataAdapter(USER, c.cn);
DA.Fill(DS);
DataTable DT = DS.Tables[0];
return DT;
【讨论】:
谢谢 SumitG 我明白了 Zec 的回答很好,再次感谢【参考方案3】:听起来你正在关闭连接,然后当你刷新它并没有重新打开连接...你能发布你的完整代码来验证吗?
【讨论】:
这是我在表单中使用的唯一代码,其他一切都只是拖放,没有任何代码,它是一个包含水晶报表查看器的表单,并且使用任务菜单绑定报表查看器和我没有其他代码,但我在问题中提出的报告刷新,你的回答是合乎逻辑的,但我既不打开也不关闭连接,提前谢谢【参考方案4】:只需将您的数据库凭据提供给方法 SetDatabaseLogon,如下所示 Report.SetDatabaseLogon("", "XXX") 用于访问db
Sql server 的 Report.SetDatabaseLogon("sa", "XXXXX","ServerName", "DatabaseName")。
但在行步之后给出 Report.SetDataSource(Dt)
【讨论】:
【参考方案5】:TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
Tables CrTables;
SalesManVisit cryRpt = new SalesManVisit();
crConnectionInfo.ServerName = @"TLPL_ICT_OPR\xxxxxxxxx";
crConnectionInfo.DatabaseName = "xxxxxxx";
crConnectionInfo.UserID = "xxxxx";
crConnectionInfo.Password = "xxxxxx";
CrTables = cryRpt.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = crConnectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
CrystalReportViewer1.ReportSource = cryRpt;
CrystalReportViewer1.RefreshReport();
cryRpt.Refresh();
【讨论】:
【参考方案6】:我的问题是安装 SQL Server 2014 客户端工具连接,以及使用 SQL Server 安装源的反向客户端连接组件。
下图asp............只安装客户端工具连接不完整的Sql server数据库......
【讨论】:
【参考方案7】:确保报表上使用了“字段资源管理器”中的所有“数据库字段” 从数据集中删除所有不会在报表上使用的表 字段浏览器>>数据库字段,右键单击>>数据库专家>>选定表
注意:如果数据表为空,则会出现此弹出窗口
【讨论】:
以上是关于如何防止水晶报表中的数据库登录窗口?的主要内容,如果未能解决你的问题,请参考以下文章