C 用vs2008連線SQL資料庫做動態水晶報表

2022-07-31 14:00:17 字數 4428 閱讀 3300

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

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

藉由這個中轉站,我們可以通過為它動態輸入資料,然後再將資料匯出到水晶報表,來達到得到有動態資料的水晶報表的目的。

僅在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";

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();

其中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";

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"]也是可以的。

用以上**取出資料庫 xxs 中表 xxs_1 中的列 ques 中的資料。

最後再寫入**:

1cry.setdatasource(dt);

2this.crystalreportviewer1.reportsource = cry;

就可以將資料寫入到水晶報表中去了。

5.當然,為了能夠反覆輸入資料到sql,再匯出資料到水晶報表,我們需要在建立水晶報表後清空sql資料庫中資料,所以在結束了以上的一切後還要在最後寫入**:

1             sqlconnection conn1 = new

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();

這樣就完成了一張用sql資料庫作為資料中轉站的動態資料水晶報表。

下面是效果演示:

當我執行程式按下「生成題庫」是,程式會往資料庫中新增資料,比如我要生成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 無法啟動分布式...