visualc#中動態操作sqlserver資料庫

來源:互聯網
上載者:User
在編寫資料庫應用程式的時候,我們可以通過sql語句來動態建立、修改資料庫以及其中的對象。本文我就向大家介紹如何運用visual c#來動態操作sql server資料庫,其中包括如何建立一個sql server資料庫以及如何建立其中的表、預存程序、視圖、索引之類的資料庫物件。本文還介紹了如何動態地修改表的模式,如何從表、預存程序以及視圖中讀取資料並顯示在應用程式的資料庫控制項中。

我們知道sql語句在操作資料庫時運用得最多的是select、insert、update和delete等對於資料的操作,而本文重點向大家介紹的是對於資料庫及其對象的操作。通過掌握這些基本的操作方法,讀者就可以更加靈活地進行資料庫應用程式的開發。

開發執行個體及步驟

1.介面設計:

本文向大家介紹一個運用visual c#動態操作資料庫的執行個體,執行個體的介面1所示。

圖1

從可知,我們的執行個體程式只包含了10個按鈕控制項以及一個datagrid控制項。按鈕控制項分為三類:

第一類為建立資料庫以及資料庫物件的按鈕;

第二類為查看不同資料庫物件中的資料的按鈕;

第三類則為修改資料庫物件的按鈕。其中的datagrid控制項則是用於顯示資料的。

2.添加引用及資料成員:

設計完介面,我們就可以開始編寫程式碼。首先是為我們的程式添加必要的引用以及一些資料成員。因為我們的程式涉及到資料庫的訪問操作,所以必須要運用到資料提供者(data provider)的對象。在.net架構下,我們主要運用的資料提供者分為兩類,一類是sql類型的,另一類是oledb類型的。它們涉及到的命名空間分別為system.data.sqlclient和system.data.oledb。因為我們的程式訪問的是sql server資料庫,所以我們運用的資料提供者對象應為sql類型的。原因很簡單,該類型的對象是專門為sql server資料庫而設計的,所以效能得到了大大的最佳化。所以,在我們的程式的開始處添加如下一句語句:


using system.data.sqlclient;

添加對system.data.sqlclient命名空間的引用後,我們接下來為程式添加一些必要的資料成員,這些資料成員為我們的類的私人成員,通過它們我們可以完成一些對資料庫及其對象的操作。


private string connectionstring = "integrated            security=sspi;initial catalog=;data source=localhost;";            private sqlconnection conn = null;            private sqlcommand cmd = null;            private string sql = null;

至於各個資料成員的意義,我想大家一看就應該會明白了,所以這裡就不多說了。

3.處理資料庫連接對象:

對於資料庫應用程式而言,串連到相應的資料庫是一個必不可少的步驟,我們的程式也不例外。所以在我們的程式的建構函式中得先建立一個資料庫連接對象,方法如下:


public form1()            {            //            // windows 表單設計器支援所必需的            //            initializecomponent();            // 建立一個串連            conn = new sqlconnection(connectionstring);            }

這樣,我們在以後的對於資料庫的操作中就可以運用該資料庫連接對象了。

而同時,在我們的程式結束時,我們有必要關閉該資料庫連接對象,否則可能會引發一些意想不到的錯誤。所以得在程式的已重載的dispose函數中添加關閉資料庫連接對象的語句,不過由於.net架構具有自動記憶體回收(garbage collection)功能,所以我們不必像在c++語言中那樣顯式的將該對象銷毀。具體方法如下:


protected override void dispose( bool disposing )            {            // 程式運行完畢,確保資料庫連接已經關閉            if (conn.state == connectionstate.open)            conn.close();            if( disposing )            {            if (components != null)            {            components.dispose();            }            }            base.dispose( disposing );            }

4.建立sql server資料庫:

在建立了資料庫連接對象後,我們就可以在程式中運用它了。首先,我們在程式中動態地建立一個sql server類型的資料庫。我們將資料庫建立在c:\mysql目錄下,所以讀者要練習該執行個體的話得先在c:下建立一個名為mysql的檔案夾,否則會出錯!建立資料庫的關鍵是函數中的sql對象,通過該對象我們指定了資料庫檔案的一些基本屬性。之後,我們新建立了一個sqlcommand對象,通過該對象我們就實際完成了對資料庫的操作。函數的實現如下:


private void button1_click(object sender, system.eventargs e)            {            // 開啟資料庫連接            if( conn.state != connectionstate.open)            conn.open();            string sql = "create database mydb on primary"            +"(name=test_data, filename =            ''c:\\mysql\\mydb_data.mdf'', size=3,"            +"maxsize=5, filegrowth=10%)log on"            +"(name=mydbb_log,            filename=''c:\\mysql\\mydb_log.ldf'',size=3,"            +"maxsize=20,filegrowth=1)";            cmd = new sqlcommand(sql, conn);            try            {            cmd.executenonquery();            }            catch(sqlexception ae)            {            messagebox.show(ae.message.tostring());            }            }

5.建立表並添加記錄:

建立了資料庫後,我們得為其建立表,表是資料庫中的基本對象。我們通過create table這句sql陳述式完成建立表的操作,表被建立後,我們就確定了其模式(schema)。之後,我們還通過insert語句向該表中添加了四條記錄以為後用。函數的實現如下:


private void button2_click(object sender, system.eventargs e)            {            // 開啟資料庫連接            if( conn.state == connectionstate.open)            conn.close();            connectionstring ="integrated security=sspi;" +            "initial catalog=mydb;" +            "data source=localhost;";            conn.connectionstring = connectionstring;            conn.open();            sql = "create table mytable"+            "(myid integer constraint pkeymyid primary key,"+            "myname char(50), myaddress char(255), mybalance            float)";            cmd = new sqlcommand(sql, conn);            try            {            cmd.executenonquery();            // 向表中添加記錄            sql = "insert into mytable(myid, myname,            myaddress, mybalance) "+            "values (1001, ''puneet nehra'', ''a 449 sect 19, delhi'', 23.98 ) " ;            cmd = new sqlcommand(sql, conn);            cmd.executenonquery();            sql = "insert into mytable(myid, myname,myaddress, mybalance) "+            "values (1002, ''anoop singh'', ''lodi road, delhi'', 353.64) " ;            cmd = new sqlcommand(sql, conn);            cmd.executenonquery();            sql = "insert into mytable(myid, myname, myaddress, mybalance) "+            "values (1003, ''rakesh m'', ''nag chowk, jabalpur m.p.'', 43.43) " ;            cmd = new sqlcommand(sql, conn);            cmd.executenonquery();            sql = "insert into mytable(myid, myname, myaddress, mybalance) "+            "values (1004, ''madan kesh'', ''4th street, lane 3, delhi'', 23.00) " ;            cmd = new sqlcommand(sql, conn);            cmd.executenonquery();            }            catch(sqlexception ae)            {            messagebox.show(ae.message.tostring());            }            }

完成此操作後,我們可以在原生sql sever企業管理器中開啟mydb資料庫並找到該表。圖2顯示了該表的設計圖示:

圖2

6.建立通用sql語句執行函數:

考慮到程式後面大量運用sqlcommand對象對資料庫進行操作,我們在程式中設計了一個通用的sql語句執行函數。它根據資料庫連接對象以及sql對象建立一個sqlcommand對象,然後完成對資料庫的相關操作。函數的實現如下:


private void executesqlstmt(string sql)            {            // 開啟資料庫連接            if( conn.state == connectionstate.open)            conn.close();            connectionstring ="integrated security=sspi;" +            "initial catalog=mydb;" +            "data source=localhost;";            conn.connectionstring = connectionstring;            conn.open();            cmd = new sqlcommand(sql, conn);            try            {            cmd.executenonquery();            }            catch(sqlexception ae)            {            messagebox.show(ae.message.tostring());            }            }

7.建立預存程序:

我們通過create procedure這句sql語句建立預存程序,同時函數中還調用了上面的通用sql語句執行函數。函數的實現如下:


private void button3_click(object sender, system.eventargs e)            {            sql = "create procedure myproc as"+            " select myname, myaddress from mytable go";            executesqlstmt(sql);            }

預存程序建立完畢後,我們可以在sql server企業管理器中找到其屬性,3所示。

圖3

8.建立視圖:

建立視圖的過程與上面建立預存程序的方法類似,只是運用到的sql語句為create view。函數的實現如下:


private void button4_click(object sender, system.eventargs e)            {            sql = "create view myview as select myname from mytable";            executesqlstmt(sql);            }

同樣,在建立完成後,我們可以在企業管理器中找到其屬性,4所示。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.