zoukankan      html  css  js  c++  java
  • visualc#中动态操作sqlserver数据库

    在编写数据库应用程序的时候,我们可以通过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所示。
  • 相关阅读:
    sp2010 升级sp2013 用户无法打开网站
    powerviot install in sharepoint 2013
    can not connect cube in performancce dashboard
    westrac server security configure user info
    添加报表服务在多服务器场
    sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
    delete job definition
    目前付款申请单内网打开慢的问题
    item style edit in sharepoint 2013
    Could not load file or assembly '$SharePoint.Project.AssemblyFullName$'
  • 原文地址:https://www.cnblogs.com/gergro/p/372899.html
Copyright © 2011-2022 走看看