关闭

C#连接access数据库,涉及水晶报表

标签: 数据库accessc#dataset报表sqlserver
5981人阅读 评论(2) 收藏 举报
分类:

最近要做的一个人使用的软件中涉及到水晶报表。初步决定用c#连接access数据库。在数据库的连接中遇到一些问题。如果是单独的数据库连接是没有什么太大的问题的,可是,用到水晶报表,感觉问题就来了,有时候都不明白是什么原因。比如,我连接sqlserver的时候,明明连接的字符串里面已经有用户名和密码的了,可是,还是会问我用户名和密码,当我把正确的输入进去以后,还是告诉我用户名和密码错误。在csdn的论坛里面搜索了,知道一个解决方案,可是,自己很懒惰,也不想去试,况且,感觉这不是跟数据库连接的问题,感觉水晶报表怪怪的。

现在决定用c#和access做了。今天晚上试了一下,没有出现用sqlserver的时候出现的问题了。想想,其实access虽然也许很多方面比不上sqlserver,可是,至少用户电脑里面不用装sqlserver了,这是一个好的地方。

下面首先讲讲c#连接access数据库,然后讲讲c#,access数据库,水晶报表。

首先是c#和access数据库相连,很简单,直接给代码好了,这里只涉绝对路径,而相对路径有些问题。

方法一:使用OleDbDataReader 来读取数据,有些限制

//连接access数据库
   //1.绝对路径连接
 OleDbConnection dbconn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data source=G:/水晶报表/tryArea/a.mdb");
   dbconn.Open();

   //操作数据
   OleDbCommand cmd=dbconn.CreateCommand();
   cmd.CommandText="select * from book";
   cmd.CommandType=CommandType.Text;
   OleDbDataReader reader=cmd.ExecuteReader();

   //读取数据的方法
   //首先要读一行,然后才能把这一行的数据显示出来
   reader.Read();
   textBox1.Text=reader.GetString(1);

//   while(reader.Read())
//   {
//           textBox1.Text=reader.GetString(1);
//   }
            //关闭reader
   reader.Close();

//关闭数据库的连接
   dbconn.Close();


方法二:使用dataset来读取数据,比较方便灵活

//用绝对路径连接数据库,然后用dataset把数据读出来
   //
   //1.绝对路径连接
   OleDbConnection dbconn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data source=G:/水晶报表/tryArea/a.mdb");
   dbconn.Open();


   //操作数据,用dataset
   OleDbDataAdapter da=new OleDbDataAdapter("select * from book",dbconn);

   DataSet ds=new DataSet();
   da.Fill(ds);

   textBox1.Text=ds.Tables[0].Rows[0]["bookname"].ToString();


   //关闭数据库的连接
   dbconn.Close();

 

下面讲讲,水晶报表,C#,access

1).cs页面中的代码并不难,如下


   //使用水晶报表
   //
   //1.绝对路径连接
   OleDbConnection dbconn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data source=G:/水晶报表/tryArea/a.mdb");
   dbconn.Open();
   //操作数据,用dataset
   OleDbDataAdapter da=new OleDbDataAdapter("select * from book",dbconn);

   Dataset1 ds=new Dataset1();//这里的Dataset是前面自己定义的数据集
   da.Fill(ds,"book");//一定要写明是放到哪个table中,否则数据根本不会读到自己定义的数据集中,why?

   //da.Fill(ds);//如果这样写,根本就得不到数据,虽然不知道是为什么会这样,可是,对dataset1,却确实是这样的
   textBox1.Text=ds.Tables[0].Rows[0][0].ToString();
   
   CrystalReport1 oRtp=null;//对应自己定义的报表.rpt的名字
   oRtp=new CrystalReport1();

   oRtp.SetDataSource(ds);//在代码页面中,把报表跟数据集关联起来,在报表中还有一处设置的地方

   crystalReportViewer1.ReportSource=oRtp;//相当于设置一个报表控件上面显示的是哪个报表


   //关闭数据库的连接
   dbconn.Close();

2)添加数据集dataset,在解决方案资源管理器中点击右键,添加新项,添加数据集。在.xsd页面中,从服务器资源管理器中的数据连接中点右键,添加连接,选择新的连接为Microsoft.Jet.4.0 OLE DB Provider。这时会让选择数据库,等等。

3)添加水晶报表页面,在解决方案资源管理器中点击右键,添加新项,添加水晶报表。在.rpt页面中,能设置报表具体的样子,关键还是要把报表跟特定的数据集关联起来。由于前面已经新建了一个数据集,就要把这个水晶报表跟这个数据集关联起来。

4)在解决方案资源管理器中的引用一项,点右键添加新的引用CrystalDecisions.CrystalReports.Engine

5).cs页面中添加

using CrystalDecisions.CrystalReports.Engine;

//连接access需要的
using System.Data.OleDb;

呵呵,这样就可以了,不过,水晶报表页面的设计不那么容易,我现在还没有怎么学会。

另外跟数据库连接用相对路径会好些,现在也不行。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:190124次
    • 积分:2905
    • 等级:
    • 排名:第12674名
    • 原创:84篇
    • 转载:13篇
    • 译文:0篇
    • 评论:135条
    最新评论
    游戏编程