C# Winform水晶报表连接Access数据库 提示需要登录

DongleiVip 2014-02-01 01:16:20

winform程序,想要实现报表打印。 Access数据库,没有密码。 在启动程序的时候提示要登录...
这个工程实在别的电脑上写好的,可以运行,换了个电脑就要登录了...
有没有遇到过这类问题的... 求解答.
(调试跟踪,报表显示前,已经可以访问数据库了,把数据都提出来处理好了,就是在显示的时候提弹出登录框了...)
...全文
295 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
DongleiVip 2014-02-04
  • 打赏
  • 举报
回复
引用
wind_cloud2011
感谢@wind_cloud2011再次回复我的问题。 现在问题解决了。 我专门写了一个访问数据库的类,以前在别的电脑上编译过去都OK,换了个电脑,换了个VS就出问题... 试了很多办法都没成功,总是要密码,可是数据我都取到了,就是报表更新数据的时候出的问题。 今天又检查了一下,什么也没改动,稀里糊涂的就好了... 我推测应该是我更新了一下.xsd的DataSet文件,然后就不需要我登录了... 搞不懂为什么。 最后,感谢所有回复的人,谢谢你们。 贴出部分代码。

 class OleDbHelper
    {
        private OleDbConnection conn;
        private OleDbDataAdapter oda = new OleDbDataAdapter();
        private OleDbCommand cmd;
        private DataSet ds = new DataSet();
        public OleDbHelper(string FilePath, string FileName)
        {
            string strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";

            strconn += FilePath +@"\"+ FileName;
            
            conn = new OleDbConnection(strconn);
        }

        public DataSet getData(string strSQL)
        {
            oda = new OleDbDataAdapter(strSQL, conn);
            oda.Fill(ds);
            return ds;
        }

        public bool setData(string strSQL)
        {
            conn.Open();
            cmd = new OleDbCommand(strSQL, conn);
            cmd.ExecuteNonQuery();
            conn.Close();
            return true;
        }

        //批量更新数据
        public bool setDs(DataTable dt)
        {
            OleDbCommandBuilder builder = new OleDbCommandBuilder(oda);
            oda.UpdateCommand = builder.GetUpdateCommand();

            if (myds.HasChanges())
            {
                try
                {
                    oda.Update(dt);
                }
                catch (Exception ex)
                {
                    throw ex;
                    //return false;
                }
                return true;
            }
            else
            {
                return false;
            }
        }
    }
.... ...... 前台页面加载数据及报表

    //加载报表
    private DataSet ds;
    private ReportDocument rd;
    private readonly string sqlTail = "SELECT * FROM Goods";

    private void LoadData()
    {
        ds = dbhelper.getData(strSql);
       
        rd = new ReportDocument();
        rd.Load(reportPath);
        rd.SetDataSource(ds);

        this.crystalReportViewer1.ReportSource = rd;
        this.crystalReportViewer1.RefreshReport();
    }
Regan-lin 2014-02-01
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/question/238321243.html看下这个思路
wind_cloud2011 2014-02-01
  • 打赏
  • 举报
回复
那你直接 打开数据库文件看看,是否可以直接打开
wind_cloud2011 2014-02-01
  • 打赏
  • 举报
回复

//用这个方式试试
        // 读取mdb数据 
        public static c ReadAllData(string tableName, string mdbPath)
        {
            DataTable dt = new DataTable();
            try
            {
                DataRow dr;
                //1、建立连接 
                string strConn
                    = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";                OleDbConnection odcConnection = new OleDbConnection(strConn);
                //2、打开连接 
                odcConnection.Open();
                //建立SQL查询 
                OleDbCommand odCommand = odcConnection.CreateCommand();
                //3、输入查询语句 
                odCommand.CommandText = "select * from " + tableName;
                //建立读取 
                OleDbDataReader odrReader = odCommand.ExecuteReader();
                //查询并显示数据 
                int size = odrReader.FieldCount;
                for (int i = 0; i < size; i++)
                {
                    DataColumn dc;
                    dc = new DataColumn(odrReader.GetName(i));
                    dt.Columns.Add(dc);
                }
                while (odrReader.Read())
                {
                    dr = dt.NewRow();
                    for (int i = 0; i < size; i++)
                    {
                        dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString();
                    }
                    dt.Rows.Add(dr);
                }
                //关闭连接 
                odrReader.Close();
                odcConnection.Close();
                             return dt;
            }
            catch
            {
                              return dt;
            }
        }


DataTable  myrpt=ReadAllData(tableName,mdbPath); 
CryView.ReportSource = myrpt;



DongleiVip 2014-02-01
  • 打赏
  • 举报
回复
@Regan-lin 回复3#楼: 我做的思路基本跟他的差不多,我专门写了个类专门负责访问数据库,数据取到了,貌似是在执行 CryView.ReportSource = myrpt; CryView.RefreshReport(); 这个之后才弹出登录提示的... 我用的是access不是sqlserver , 也没有设置密码。 添加密码我也试过,提示用户名、密码不正确....
DongleiVip 2014-02-01
  • 打赏
  • 举报
回复
@w958796636 回复1#楼: access数据库没有加密码,程序也访问数据库了,数据都取到了,也处理了。 @wind_cloud2011 回复2#楼: access可以打开... 我用的.xsd DataSet文件来传送数据集的... 在别的电脑上做了的,可以访问,换个电脑就不行了。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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