C#串連access資料庫,涉及水晶報表

來源:互聯網
上載者:User

最近要做的一個人使用的軟體中涉及到水晶報表。初步決定用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;

呵呵,這樣就可以了,不過,水晶報表頁面的設計不那麼容易,我現在還沒有怎麼學會。

另外跟資料庫連接用相對路徑會好些,現在也不行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.