最近要做的一個人使用的軟體中涉及到水晶報表。初步決定用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;
呵呵,這樣就可以了,不過,水晶報表頁面的設計不那麼容易,我現在還沒有怎麼學會。
另外跟資料庫連接用相對路徑會好些,現在也不行。