博主是個還在上大學的新手,如果有什麼說錯的地方請務必幫我指出來,謝謝!
想要完成乙個能夠動態改變其中資料的水晶報表,可以通過建立乙個 資料的中轉站來儲存和輸出資料的方式。
藉由這個中轉站,我們可以通過為它動態輸入資料,然後再將資料匯出到水晶報表,來達到得到有動態資料的水晶報表的目的。
僅在vs2008中,很多它自帶的應用也可以達到中轉站的作用,比如陣列,資料集等。
博主最近剛在學sql所以嘗試了用vs連線資料庫來做水晶報表。
1.首先,博主在sql中建立了名為xxs的資料庫,然後再在資料庫xxs中建立了一張名為xxs_1的**,同時在其中建立了名為ques的列。
2.然後回到vs2008,建立windows窗體應用程式(博主是為了給資料庫錄入資料才用窗體的,網友有其他方法就隨意了。)
為程式寫入**:
1 sqlconnection conn2 = new其中conn2.connectionstring是sql資料庫的路徑,字串sql2是將要在sql中執行的sql語句,字串f是要為 「列ques」新增的資料。sqlconnection();
2 conn2.connectionstring = "
server=.;database=xxs;uid=sa;pwd=123";
3conn2.open();
4 sqlcommand cmd2 = new
sqlcommand();
5 cmd2.connection =conn2;
6 cmd2.commandtype =commandtype.text;
7string sql2 = "
insert into xxs_1(ques) values(@ques)";
8 sqlparameter parameters2 = new
sqlparameter9;
13 cmd2.commandtext =sql2;
14cmd2.parameters.addrange(parameters2);
15cmd2.executenonquery();
16conn2.close();
17 cmd2.dispose();
為了給列新增足夠多的資料,博主用了迴圈語句,在這裡就不細說了,畢竟只是對以上語句進行迴圈,為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用以上**取出資料庫 xxs 中表 xxs_1 中的列 ques 中的資料。crystalreport1();
2 sqlconnection conn = new
sqlconnection();
3 conn.connectionstring = "
server=.;database=xxs;uid=sa;pwd=123";
4conn.open();
5 sqlcommand cmd = new
sqlcommand();
6 cmd.connection =conn;
7 cmd.commandtype =commandtype.text;
8string 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"]也是可以的。
最後再寫入**:
1cry.setdatasource(dt);
2this.crystalreportviewer1.reportsource = cry;
就可以將資料寫入到水晶報表中去了。
5.當然,為了能夠反覆輸入資料到sql,再匯出資料到水晶報表,我們需要在建立水晶報表後清空sql資料庫中資料,所以在結束了以上的一切後還要在最後寫入**:
1 sqlconnection conn1 = new這樣就完成了一張用sql資料庫作為資料中轉站的動態資料水晶報表。sqlconnection();
2 conn1.connectionstring = "
server=.;database=xxs;uid=sa;pwd=123";
3conn1.open();
4 sqlcommand cmd1 = new
sqlcommand();
5 cmd1.connection =conn1;
6 cmd1.commandtype =commandtype.text;
7string sql1 = "
truncate table xxs_1";
8 cmd1.commandtext =sql1;
9cmd1.executenonquery();
10 conn1.close();
下面是效果演示:
當我執行程式按下「生成題庫」是,程式會往資料庫中新增資料,比如我要生成40道運算題,就可以得到這樣的表
再當我按下」預覽報表「時,便得到了這樣的水晶報表:
vs2008 連線mysql 用C語言連線
前提是裝好mysql 和vs2008 mysql version server version 5.5.19 mysql community server gpl 具體步驟如下 1 在mysql 的安裝目錄下找到以下幾個檔案 libmysql.lib libmysql.dll c program f...
vc6 0轉vs2008連線錯誤
把vc6.0的工程轉到vs2008後,編譯發現有連線錯誤。如下 1 cvtres fatal error cvt1100 duplicate resource.type manifest,name 1,language 0x0409 1 link fatal error lnk1123 failur...
SQL2008 連線SQL2000 問題總結
注意防火牆關閉!1.sql2008 無法連線sql2000 需要新增 win2003 使用者名稱和密碼 2.msdt不可用 啟動服務 distributed transaction coordinator 3.無法執行該操作,因為鏈結伺服器 的 ole db 訪問介面 sqlncli 無法啟動分布式...