C# 用vs2008連接SQL數據庫做動態水晶報表


博主是個還在上大學的新手,如果有什么說錯的地方請務必幫我指出來,謝謝!

想要完成一個能夠動態改變其中數據的水晶報表,可以通過創建一個 數據的中轉站來存儲和輸出數據的方式。

借由這個中轉站,我們可以通過為它動態輸入數據,然后再將數據導出到水晶報表,來達到得到有動態數據的水晶報表的目的。

僅在vs2008中,很多它自帶的應用也可以達到中轉站的作用,比如數組,數據集等。

博主最近剛在學SQL所以嘗試了用VS連接數據庫來做水晶報表。

 

1.首先,博主在SQL中創建了名為xxs的數據庫,然后再在數據庫xxs中創建了一張名為xxs_1的表格,同時在其中建立了名為ques的列。

2.然后回到vs2008,創建windows窗體應用程序(博主是為了給數據庫錄入數據才用窗體的,網友有其他方法就隨意了。)

為程序寫入代碼:

 1                             SqlConnection conn2 = new SqlConnection();
 2                             conn2.ConnectionString = "server=.;database=xxs;uid=sa;pwd=123";
 3                             conn2.Open();
 4                             SqlCommand cmd2 = new SqlCommand();
 5                             cmd2.Connection = conn2;
 6                             cmd2.CommandType = CommandType.Text;
 7                             string sql2 = "insert into xxs_1(ques) values(@ques)";
 8                             SqlParameter[] parameters2 = new SqlParameter[]
 9                            { 
10                                  new SqlParameter("@ques", f)
11            
12                            };
13                             cmd2.CommandText = sql2;
14                             cmd2.Parameters.AddRange(parameters2);
15                             cmd2.ExecuteNonQuery();
16                             conn2.Close();
17                             cmd2.Dispose();

其中conn2.ConnectionString是SQL數據庫的路徑,字符串sql2是將要在SQL中執行的SQL語句,字符串f是要為 “列ques”添加的數據。

為了給列添加足夠多的數據,博主用了循環語句,在這里就不細說了,畢竟只是對以上語句進行循環,為f反復賦值,再寫入列而已。

 

3.完成了對數據的錄入以后,我們就可以建立水晶報表了。

就如上所說,博主為了給數據庫xxs錄入數據,所以用了form窗體。

在窗體中博主應用了如下兩個button組件。

其中“生成題庫”就是應用第2步中的代碼為數據庫輸入數據,而“預覽報表”就是我們現在要講的建立水晶報表了。

在寫代碼之前,博主先做了一些准備工作。

    (1)連接數據庫。

            點擊菜單欄的數據按鈕/在打開的菜單中點擊添加新的數據源/在彈出的數據源配置向導中選擇從“數據庫”獲取數據源,點擊下一步/點擊新建連接/在彈出的添加連接窗口中寫入服務器名(一般都是.(對,就是個“點”)),選擇用SQL SEVER 身份驗證,輸入用戶名和密碼,然后就可以在“選擇或輸入一個數據庫名”中寫入數據庫名了,然后點擊確定,點擊下一步/進入"選擇數據庫對象",選擇你需要在水晶報表中顯示的表和列,點擊完成。

    (2)創建水晶報表。

            右鍵解決方案資源管理器下的第一個項目/在彈出的菜單欄中選擇添加,點擊新建項。/在彈出的添加新項中選擇Reporting中的Crysal報表(如下)。/

 

        /然后會彈出Crystal report庫窗體,選擇使用“報表向導“和”標准“,選擇確定。/在標准報表創建向導中打開項目數據,打開ADO.NET數據集選擇需要的數據庫中的表,將它添加到右側。點擊下一步/選擇需要的列,將它添加到右側,點擊下一步。/分組和記錄選定我沒用到,所以直接點擊了下一步,樣式我選擇了表,點擊完成。 

至此,我們已經完成了對水晶報表的創建。

4,為水晶報表添加數據。

     為了使”預覽報表“功能可以完善一些,博主又在項目中添加了一個窗體應用程序Form2(如下)。

     

Form2中只添加一個CrystalReportViewer控件。

然后雙擊Form2窗體,寫入代碼:

 1             CrystalReport1 cry = new CrystalReport1();
 2             SqlConnection conn = new SqlConnection();
 3             conn.ConnectionString = "server=.;database=xxs;uid=sa;pwd=123";
 4             conn.Open();
 5             SqlCommand cmd = new SqlCommand();
 6             cmd.Connection = conn;
 7             cmd.CommandType = CommandType.Text;
 8             string sql = "select ques from xxs_1 ";
 9             cmd.CommandText = sql;
10             DataSet ds = new DataSet();//新建一個臨時數據庫
11             SqlDataAdapter adt = new SqlDataAdapter();
12             adt.SelectCommand = cmd;
13             adt.Fill(ds, "inf");//將數據導入到ds中
14             DataTable dt = ds.Tables["inf"];//只是為了后面引用時方便點,直接寫ds.Tables["inf"]也是可以的。

用以上代碼取出數據庫 xxs 中表 xxs_1 中的列 ques 中的數據。

最后再寫入代碼:

 1 cry.SetDataSource(dt);

2 this.crystalReportViewer1.ReportSource = cry; 

就可以將數據寫入到水晶報表中去了。

 

5.當然,為了能夠反復輸入數據到SQL,再導出數據到水晶報表,我們需要在建立水晶報表后清空SQL數據庫中數據,所以在結束了以上的一切后還要在最后寫入代碼:

 1             SqlConnection conn1 = new SqlConnection();
 2             conn1.ConnectionString = "server=.;database=xxs;uid=sa;pwd=123";
 3             conn1.Open();
 4             SqlCommand cmd1 = new SqlCommand();
 5             cmd1.Connection = conn1;
 6             cmd1.CommandType = CommandType.Text;
 7             string sql1 = "truncate table xxs_1";
 8             cmd1.CommandText = sql1;
 9             cmd1.ExecuteNonQuery();
10             conn1.Close();

 

這樣就完成了一張用SQL數據庫作為數據中轉站的動態數據水晶報表。

 

下面是效果演示:

當我運行程序按下“生成題庫”是,程序會往數據庫中添加數據,比如我要生成40道運算題,就可以得到這樣的表

 

再當我按下”預覽報表“時,便得到了這樣的水晶報表:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM