学习笔记——ADO.NET

本文详细介绍了ADO.NET中连接数据库的各个数据提供程序,如SQL Server、ODBC、OLEDB和Oracle。通过SqlConnection对象的Open和Close方法进行连接与断开,并通过Command对象执行SQL语句,包括NonQuery、ExecuteReader和ExecuteScalar方法。还讨论了DataReader对象的使用,以及DataAdapter对象在数据填充和更新中的作用,最后提到了DataSet对象的特性及如何进行数据合并和复制。
连接数据库——Connection对象
    Connection对象是一个连接对象,主要功能是建立于物理数据库的连接
        SQL Server数据提供程序,位于System.Data.SqlClient命名空间
        ODBC数据提供程序,位于System.Data.Odbc命名空间
        OLEDB数据提供程序,位于System.Data.OleDb命名空间
        Oracle数据提供程序,位于System.Data.OracleClient命名空间


    连接数据库时,首先通过using System.Data.SqlClient来引用命名空间,连接数据库,
    连接数据库后,通过调用SqlConnection对象的Open方法打开数据库。
    关闭数据库可调用SqlConnection的Close方法或Dispose方法。
    区别在于:Close用于关闭一个连接,此后可以用Open再次打开。Dispose不仅关闭一个
    连接,而且还清理连接所占用资源。此后必须先重新连接数据库才能用Open


    通过SqlConnection对象的State属性判断数据库的连接状态
    语法为:    public override ConnectionState State {get;}
                属性值:ConnectionState枚举
    ConnectionState枚举的值和说明如下:
    Broken          与数据库的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开
    Closed          连接处于关闭状态
    Connecting      连接对象正在于数据源连接
    Executing       连接对象正在执行命令
    Fetching        连接对象正在检索数据
    Open            连接处于打开状态


    实例:
        string ConStr="server=;database=db_RFID;uid=sa;pwd=password";//分别为服务器、数据库名、用户名、密码
        SqlConnection conn=new SqlConnection(ConStr);
        conn.Open();
        if(conn.State==ConnectionState.Open)
            label1.Text="成功打开!";
        conn.Close();


执行SQL语句——Command对象
    Command对象是一个数据命令对象,主要功能是想数据库发送查询、更新、删除、修改操作的SQL语句
    Command对象有3个重要属性,分别是Connection、CommandText、CommandType属性。Connection用于设置SqlCommand
    使用的SqlConnection。CommandText属性用于设置要对数据源执行的SQL语句或存储过程。CommandType用于设置或指定
    CommandText的类型。
    CommandType属性的值是CommandType枚举值,枚举成员如下:
        StoredProcedure:存储过程的名称
        TableDirect:表的名称
        Text:SQL文本命令
    实例:
        SqlConnection conn;
        conn=new SqlConnection("server=;database=db_RFID;uid=sa;pwd=password");
        conn.Open();
        SqlCommand cmd=new SqlCommand();
        cmd.Connection=conn;
        cmd.CommandText="select count(*)from tb_test";
        cmd.CommandType=CommandType.Text;
    SqlCommand对象中几种执行SQL语句的方法:
        ExecuteNonQuery方法:
            执行SQL语句,并返回受影响的行数,在使用SqlCommand向数据库发送增、删、改命令时,
            通常使用ExecuteNonQuery方法执行发送的SQL语句。
            语法:
                public override int ExecuteNonQuery();
            实例:
                int i=Convert.ToInt32(cmd.ExecuteNonQuery());
                label2.Text="共有"+i.ToString()+"行发生变化。";
        ExecuteReader方法:
            执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例
            语法:
                public SqlDataReader ExecuteReader();
            实例:
                SqlDataReader sdr=cmd.ExecuteReader();
                //sdr包含上面的select语句所挑选出的所有数据
                while(sdr.Read())
                    listView1.Items.Add(sdr[1].ToString());
        ExecuteScalar方法:
            执行SQL语句,返回结果集中的第一行的第一列,若结果集为空则为空引用
            语法:
                public override Object ExecuteScalar();
            实例:
                int i=Convert.ToInt32(cmd.ExecuteScalar());
                //利用该方法获取指定表中的数据数量


读取数据——DataReader对象
    DataReader对象是数据读取器对象,提供只读向前的游标
    在使用DataReader对象读取数据时,可以使用ExecuteReader方法,根据SQL语句的结果创建一个SqlDataReader对象
    判断查询结果中是否有值:
        通过SqlDataReader对象的HasRows属性,如果SqlDataReader包含一行或多行,则返回true,否则返回false
        实例:
            SqlDataReader sdr=cmd.ExecuteReader();
            sdr.Read();
            if(sdr.HasRows)MessageBox.Show("数据表有值!");
    读取数据:
        如果要读取数据表中的数据,通过ExecuteReader方法,根据SQL语句创建一个SqlDataReader对象后,再调用
        SqlDataReader对象的Read方法读取数据。Read方法使SqlDataReader前进到下一条记录,SqlDataReader的默认
        位置在第一条记录面前
        注意:
            对于每个关联的SqlConnection,一次只能打开一个SqlDataReader,在第一个关闭之前,打开另一个的
            任何尝试都会失败。
        实例:
            SqlDataReader sdr=cmd.ExecuteReader();
            sdr.Read();
            sdr.Close();




数据适配器——DataAdapter对象
    DataAdapter对象是一个数据适配器对象,是DataSet与数据源之间的桥梁。
    DataAdapter提供4个属性,实现用于与数据源之间的互通。
        SelectCommand属性:向数据库发送查询SQL语句。
        DeleteCommand属性:向数据库发送删除SQL语句。
        InsertCommand属性:向数据库发送插入SQL语句。
        UpdateCommand属性:向数据库发送更新SQL语句。
    对数据库进行操作时,只要将这四个属性设置为相应 的SQL语句即可。
    DataAdapter对象中还有几个主要的方法:
        Fill方法用数据填充DataSet
            语法:
                public int Fill(DataSet dataset,string srcTable);
                dataSet:要用记录和框架填充的DataSet
                srcTable:用于表映射的源表的名称
                返回值:已在DataSet中成功添加或刷新的行数,这不包括受不返回行的语句影响的行
        Update方法更新数据库:
            DataAdapter将调用DeleteCommand、InsertCommand以及UpdateCommand属性。
            语法:
                public int Update(DataTable dataTable);
                dataTable:用于更新数据源的DataSet
                返回值:DataSet中成功更新的行数
    通过DataAdapter对象的Fill方法填充DataSet数据集,Fill方法使用Select语句从数据源中检索数据。
    与Select命令关联的Connection对象必须有效,但不需要将其打开。
        实例:
            SqlConnection conn=new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
            SqlCommand cmd=new SqlCommand("select * from tb_command",conn);
            SqlDataAdapter sda=new SqlDataAdapter();
            sda.SelectCommand=cmd;
            DataSer ds=new DataSet();
            sda.Fill(ds,"cs");
    使用DataAdapter对象的Update方法,可以将DataSet中修改过的数据及时更新到数据库中。
    在使用Update方法之前,要实例化一个CommandBuilder类,它能自动根据DataAdapter的SelectCommand
    的SQL语句判断其他的InsertCommand、UpdateCommand和DeleteCommand。这样就不用设置DataAdapter
    的InsertCommand、UpdateCommand和DeleteCommand属性,直接使用DataAdapter的Update方法来更新DataSet
    DataTable或DataRow数组即可。
        实例:
            sda,Fill(ds,"cs");//同上面的接上来


            DataTable dt=ds.Tables["cs"];
            sda.FillSchema(dt,SchemaType.Mapped);//把表结构加载到tb_command表中
            DataRow dr=dt.Rows.Find(txtNo.Text);//创建一个DataRow
            //设置DataRow中的值
            dr["姓名"]=txtName.Text.Trim();
            dr["性别"]=txtName.Text.Trim();
            dr["年龄"]=txtName.Text.Trim();
            dr["奖金"]=txtName.Text.Trim();
            SqlCommandBuilder cmdbuilder=new SqlCommandBuilder(sda);
            sda.Update(dt);




数据集——DataSet对象
    DataSet对象就像存放于内存中的一个小型数据库,它可以包含数据表、数据列、数据行、视图、约束以及关系
    通常DataSet的数据来源于数据库或XML,为了从数据库中获取数据,需要用到DataAdapter
        实例:
            conn=new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
            DataSet ds=new DataSet();
            SqlDataAdapter sda=new SqlDataAdapter("select * from tb_test",conn);
            sda.Fill(ds);//使用Fill方法填充DataSet
    合并DataSet内容
        可以使用DataSet的Merge方法将DataSet、DataTable和DataRow数组的内容并入现有的DataSet中。
        Merge方法将指定的DataSet及其架构与当前的DataSet合并,在此过程中,将根据给定的参数保留或放弃在当前
        DataSet中的更改并处理不兼容的架构
            语法:
                public void Merge(DataSet dataSet,bool preserveChanges,MissingSchemaAction missingSchemaAction)
                dataSet:其数据和将被合并到DataSet中
                preserveChanges:要保留当前的DataSet中的修改,则为true,否则为false
                missingSchemaAction:这是一个枚举值,成员如下:
                    Add             添加必须的列以完成架构
                    AddWithKey      添加必须的列和主键信息以完成架构,用户可以在每个DataTable上显式设置主键约束
                                    这将确保对与现有的记录匹配的传入记录进行更新,而不是追加
                    Error           如果缺少指定的列映射,则生成InvalidOperationException
                    Ignore          忽略额外列
            实例:
                conn=new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
                DataSet ds=new DataSet();
                DataSet ds1=new DataSet();
                SqlDataAdapter sda=new SqlDataAdapter("select * from tb_test",conn);
                sda.Fill(ds);
                SqlDataAdapter sda1=new SqlDataAdapter("select * from tb_man",conn);
                sda1.Fill(ds);
                ds1.Merge(ds,true,MissingSchemaAction.AddWithKey);
    复制DataSet内容
        为了在不影响原始数据的情况下使用数据,或者使用DataSet中数据的子集,可以创建DataSet的副本
        可以使用DataSet对象的Copy方法创建包含架构和数据的DataSet的原样副本
            语法:
                public DataSet Copy();
                返回值:新的DataSet,具有与该DataSet相同的结构和数据
            实例:
                conn=new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
                DataSet ds=new DataSet();
                SqlDataAdapter sda=new SqlDataAdapter("select * from tb_test",conn);
                sda.Fill(ds);
                DataSet ds1=ds.Copy();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值