最近要做的一个人使用的软件中涉及到水晶报表。初步决定用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;
呵呵,这样就可以了,不过,水晶报表页面的设计不那么容易,我现在还没有怎么学会。
另外跟数据库连接用相对路径会好些,现在也不行。