水晶报表要输入账户密码还是那个问题

lxgloveme 2009-11-09 09:20:23
我用c#做一个C/S结构的程序,用到水晶报表打印,水晶报表的数据源用的是ODBCODBC数据源连接的是远程服务器(SQL SERVER 2000),[/color]问题出在每次打印时都弹出数据库登录窗口,要输入UID,和PWD。需要修改那些东西实现不弹出数据库登录窗口

提示:我连接本地数据库时不弹出这个登录窗口。

泰哥这个是你上次给我的帮助 试验了下还是没有解决问题
http://topic.csdn.net/u/20090626/17/8090bf70-bed9-41ac-9e09-c0a6a7ab4cb8.html
...全文
330 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿泰 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lxgloveme 的回复:]
引用 8 楼 babyt 的回复:
官方也没有提供ODBC的代码操作实例,所以之前的代码包括楼上的各位提供的代码都是通过OLEDB之类方法操作的

我觉得ODBC本身是依赖于ODBC的名称去找数据源的
你的服务器上的ODBC配置,ODBC的名称跟你本机是一样的吗?

另外可以参照下文中的方法操作一下,找了很多,它可能是最有价值的了
http://stackoverflow.com/questions/674363/how-do-i-change-a-crystal-reports-odbc-database-connection-at-runtime

终于等到你来了  这个跟您那个博客应该是一样的吧 我在仔细研究下
问题解决后告诉您
[/Quote]

这个跟博客里的不一样。
如果还不行的话,建议你换成OLEDB的方式试试。
lxgloveme 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 babyt 的回复:]
官方也没有提供ODBC的代码操作实例,所以之前的代码包括楼上的各位提供的代码都是通过OLEDB之类方法操作的

我觉得ODBC本身是依赖于ODBC的名称去找数据源的
你的服务器上的ODBC配置,ODBC的名称跟你本机是一样的吗?

另外可以参照下文中的方法操作一下,找了很多,它可能是最有价值的了
http://stackoverflow.com/questions/674363/how-do-i-change-a-crystal-reports-odbc-database-connection-at-runtime
[/Quote]
终于等到你来了 这个跟您那个博客应该是一样的吧 我在仔细研究下
问题解决后告诉您
lxgloveme 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lzsh0622 的回复:]
分析一下问题出在哪?换一台机器试试

(1)OCX控件完整性及注册问题
(2)水晶报表
(3).net
(4)操作系统
(5)其他因素,如病毒等.
[/Quote]

恩 谢谢
刚以为在代码中写入数据库连接信息就能解决 但实验了下还是不行
换成ADO.NET连接数据库应该能解决 但那是退而求之的吧
阿泰 2009-11-09
  • 打赏
  • 举报
回复
官方也没有提供ODBC的代码操作实例,所以之前的代码包括楼上的各位提供的代码都是通过OLEDB之类方法操作的

我觉得ODBC本身是依赖于ODBC的名称去找数据源的
你的服务器上的ODBC配置,ODBC的名称跟你本机是一样的吗?

另外可以参照下文中的方法操作一下,找了很多,它可能是最有价值的了
http://stackoverflow.com/questions/674363/how-do-i-change-a-crystal-reports-odbc-database-connection-at-runtime
lzsh0622 2009-11-09
  • 打赏
  • 举报
回复
分析一下问题出在哪?换一台机器试试

(1)OCX控件完整性及注册问题
(2)水晶报表
(3).net
(4)操作系统
(5)其他因素,如病毒等.
lxgloveme 2009-11-09
  • 打赏
  • 举报
回复
不行 解决不了
lxgloveme 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lei19890721 的回复:]
这个问题以前也遇到过,后来不记得怎么解决的了、
    这个是以前的那代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using CrystalDecisions.CrystalReports.Engine;
using IPMPro.Models;
using IPMPro.BLL.TargetManage;
using IPMPro.DAL.CorporationDepr;
using IPMPro.DAL.MaterialDepr;

public partial class IPMPRO_TargetManage_ComplementConsume_PrintWastageInfo : System.Web.UI.Page
{

    //string year = "2009";
    //string month = "7";
    //string varietvid;
    ReportDocument reportDoc = new ReportDocument();

    protected void Page_Load(object sender, EventArgs e)
    {
        string year = DateTime.Now.Year.ToString();

        string[] arr = new string[] { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" };
        int number = DateTime.Now.Month;
        string str = arr[number - 1];
        DataTable dt = new DataTable();
       
            WastageInfoPrint wastage = new WastageInfoPrint();
            DataColumn column2 = new DataColumn("MaterialfId");
            DataColumn column3 = new DataColumn("Varietvid");
            DataColumn column4 = new DataColumn("ManufacturePlanid");
            DataColumn column5 = new DataColumn("year");
            DataColumn column6 = new DataColumn("month");
            DataColumn column7 = new DataColumn("unit");
            DataColumn column8 = new DataColumn("Consumer");
            DataColumn column9 = new DataColumn("consume");
            DataColumn column10 = new DataColumn("allconsume");
            DataColumn column11 = new DataColumn("remark");

            dt.Columns.Add(column2);
            dt.Columns.Add(column3);
            dt.Columns.Add(column4);
            dt.Columns.Add(column5);
            dt.Columns.Add(column6);
            dt.Columns.Add(column7);
            dt.Columns.Add(column8);
            dt.Columns.Add(column9);
            dt.Columns.Add(column10);
            dt.Columns.Add(column11);

            wastage.Tables.Add(dt);
            IList <Wastage> list = new List <Wastage>();
            list = WastageInfoManager.AllWastage(year, str);
            foreach (Wastage was in list)
            {
                DataRow dr = dt.NewRow();
                dr["Varietvid"] = was.Varietv.VarietyName;
                dr["MaterialfId"] = was.MaterialfId.MaterialType;
                dr["ManufacturePlanid"] = was.ManufacturePlan.PlanAim;
                dr["year"] = was.Year;
                dr["month"] = was.Month;
                dr["unit"] = was.Unit;
                dr["Consumer"] = was.Consumer;
                dr["consume"] = was.Consume;
                dr["allconsume"] = was.Allconsume;
                dr["remark"] = was.Remark;
               
                dt.Rows.Add(dr);
            }
        reportDoc.Load(Server.MapPath("~/IPMPRO/TargetManage/ComplementConsume/CrystalRe.rpt"));
        reportDoc.SetDataSource(dt);

        CrystalReportViewer1.ReportSource = reportDoc;

    }
}

[/Quote]

谢谢 我看下
lei19890721 2009-11-09
  • 打赏
  • 举报
回复
这个问题以前也遇到过,后来不记得怎么解决的了、
这个是以前的那代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using CrystalDecisions.CrystalReports.Engine;
using IPMPro.Models;
using IPMPro.BLL.TargetManage;
using IPMPro.DAL.CorporationDepr;
using IPMPro.DAL.MaterialDepr;

public partial class IPMPRO_TargetManage_ComplementConsume_PrintWastageInfo : System.Web.UI.Page
{

//string year = "2009";
//string month = "7";
//string varietvid;
ReportDocument reportDoc = new ReportDocument();

protected void Page_Load(object sender, EventArgs e)
{
string year = DateTime.Now.Year.ToString();

string[] arr = new string[] { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" };
int number = DateTime.Now.Month;
string str = arr[number - 1];
DataTable dt = new DataTable();

WastageInfoPrint wastage = new WastageInfoPrint();
DataColumn column2 = new DataColumn("MaterialfId");
DataColumn column3 = new DataColumn("Varietvid");
DataColumn column4 = new DataColumn("ManufacturePlanid");
DataColumn column5 = new DataColumn("year");
DataColumn column6 = new DataColumn("month");
DataColumn column7 = new DataColumn("unit");
DataColumn column8 = new DataColumn("Consumer");
DataColumn column9 = new DataColumn("consume");
DataColumn column10 = new DataColumn("allconsume");
DataColumn column11 = new DataColumn("remark");

dt.Columns.Add(column2);
dt.Columns.Add(column3);
dt.Columns.Add(column4);
dt.Columns.Add(column5);
dt.Columns.Add(column6);
dt.Columns.Add(column7);
dt.Columns.Add(column8);
dt.Columns.Add(column9);
dt.Columns.Add(column10);
dt.Columns.Add(column11);

wastage.Tables.Add(dt);
IList<Wastage> list = new List<Wastage>();
list = WastageInfoManager.AllWastage(year, str);
foreach (Wastage was in list)
{
DataRow dr = dt.NewRow();
dr["Varietvid"] = was.Varietv.VarietyName;
dr["MaterialfId"] = was.MaterialfId.MaterialType;
dr["ManufacturePlanid"] = was.ManufacturePlan.PlanAim;
dr["year"] = was.Year;
dr["month"] = was.Month;
dr["unit"] = was.Unit;
dr["Consumer"] = was.Consumer;
dr["consume"] = was.Consume;
dr["allconsume"] = was.Allconsume;
dr["remark"] = was.Remark;

dt.Rows.Add(dr);
}
reportDoc.Load(Server.MapPath("~/IPMPRO/TargetManage/ComplementConsume/CrystalRe.rpt"));
reportDoc.SetDataSource(dt);

CrystalReportViewer1.ReportSource = reportDoc;

}
}
lxgloveme 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lzsh0622 的回复:]
PULL 模式,水晶报表中的数据库登录问题。
运行时登录数据库服务器的方法(PULL 模式)
在报表的cs文件中,加上数据库连接。
1、设置 ReportDocument 的 TableLogonInfo……
Dim ReportDoc As New ReportDocument()
Dim logonInfo As New TableLogonInfo
Dim table As table
ReportDoc.Load("C:\Rpts\publish.rpt")
For Each table IN ReportDoc.DataBase.Tables
logonInfo= table.LogonInfo
with logonInfo.connectioninfo
.serverName= "Localhost"
.Databasename= "pubs"
.UserID= "sa"
.Password=""
End With
table.applyLogonInfo(logonInfo)
next table
Crviewer.reportsource = reportDoc

2、如果是多个相关的表作为报表的数据源,最好使用存储过程或者查询作为数据源。

3、将“数据库连接信息”存放在 web.config 配置文件,易维护。
using CrystalDecisions.Shared ; //负责解释TableLogOnInfo类
using CrystalDecisions.CrystalReports.Engine ; //负责解释ReportDocument类

private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表
ReportDocument oRpt = new ReportDocument();
//获取.rpt文件真实路径
string path;
path=Server.MapPath ("cr.rpt");
oRpt.Load (path);

//从web.config中获取logOnInfo参数信息
string a,b,c,d;
//获取ServerName
a=System.Configuration.ConfigurationSettings.AppSettings ["servername"];
//获取DatabaseName
b=System.Configuration.ConfigurationSettings.AppSettings ["database"];
//获取UserId
c=System.Configuration.ConfigurationSettings.AppSettings ["userid"];
//获取password
d=System.Configuration.ConfigurationSettings.AppSettings ["pass"];
//设置logOnInfo参数
logOnInfo.ConnectionInfo.ServerName = a;
logOnInfo.ConnectionInfo.DatabaseName = b;
logOnInfo.ConnectionInfo.UserID = c;
logOnInfo.ConnectionInfo.Password = d;

oRpt.Database.Tables [0].ApplyLogOnInfo (logOnInfo);

//建立.rpt文件与CryStalReportviewer文件之间的连接
CrystalReportViewer1.ReportSource = oRpt;

DataBind();
}

[/Quote]

您说这个跟这个http://topic.csdn.net/u/20090626/17/8090bf70-bed9-41ac-9e09-c0a6a7ab4cb8.html 帖子内容一样 我试验过了 问题解决不了
lzsh0622 2009-11-09
  • 打赏
  • 举报
回复
PULL 模式,水晶报表中的数据库登录问题。
运行时登录数据库服务器的方法(PULL 模式)
在报表的cs文件中,加上数据库连接。
1、设置 ReportDocument 的 TableLogonInfo……
Dim ReportDoc As New ReportDocument()
Dim logonInfo As New TableLogonInfo
Dim table As table
ReportDoc.Load("C:\Rpts\publish.rpt")
For Each table IN ReportDoc.DataBase.Tables
logonInfo= table.LogonInfo
with logonInfo.connectioninfo
.serverName= "Localhost"
.Databasename= "pubs"
.UserID= "sa"
.Password=""
End With
table.applyLogonInfo(logonInfo)
next table
Crviewer.reportsource = reportDoc

2、如果是多个相关的表作为报表的数据源,最好使用存储过程或者查询作为数据源。

3、将“数据库连接信息”存放在 web.config 配置文件,易维护。
using CrystalDecisions.Shared ; //负责解释TableLogOnInfo类
using CrystalDecisions.CrystalReports.Engine ; //负责解释ReportDocument类

private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表
ReportDocument oRpt = new ReportDocument();
//获取.rpt文件真实路径
string path;
path=Server.MapPath ("cr.rpt");
oRpt.Load (path);

//从web.config中获取logOnInfo参数信息
string a,b,c,d;
//获取ServerName
a=System.Configuration.ConfigurationSettings.AppSettings ["servername"];
//获取DatabaseName
b=System.Configuration.ConfigurationSettings.AppSettings ["database"];
//获取UserId
c=System.Configuration.ConfigurationSettings.AppSettings ["userid"];
//获取password
d=System.Configuration.ConfigurationSettings.AppSettings ["pass"];
//设置logOnInfo参数
logOnInfo.ConnectionInfo.ServerName = a;
logOnInfo.ConnectionInfo.DatabaseName = b;
logOnInfo.ConnectionInfo.UserID = c;
logOnInfo.ConnectionInfo.Password = d;

oRpt.Database.Tables [0].ApplyLogOnInfo (logOnInfo);

//建立.rpt文件与CryStalReportviewer文件之间的连接
CrystalReportViewer1.ReportSource = oRpt;

DataBind();
}
lxgloveme 2009-11-09
  • 打赏
  • 举报
回复
郁闷呢 在线等
lxgloveme 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 babyt 的回复:]
引用 10 楼 lxgloveme 的回复:
引用 8 楼 babyt 的回复:
官方也没有提供ODBC的代码操作实例,所以之前的代码包括楼上的各位提供的代码都是通过OLEDB之类方法操作的

我觉得ODBC本身是依赖于ODBC的名称去找数据源的
你的服务器上的ODBC配置,ODBC的名称跟你本机是一样的吗?

另外可以参照下文中的方法操作一下,找了很多,它可能是最有价值的了
http://stackoverflow.com/questions/674363/how-do-i-change-a-crystal-reports-odbc-database-connection-at-runtime

终于等到你来了  这个跟您那个博客应该是一样的吧 我在仔细研究下
问题解决后告诉您


这个跟博客里的不一样。
如果还不行的话,建议你换成OLEDB的方式试试。
[/Quote]


恩 实在不行的话只有换成OLEDB了

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧