zoukankan      html  css  js  c++  java
  • ADO.NET五大对象理论和实践(草稿)

    一、ADO.NET五大对象理论

    1、 Connection:与数据源建立连接。

    2、 Command:对数据源执行SQL命令并返回结果。

      Command对象在执行的的时候有几个比较重要的方法,如ExecuteNonQuery方法,执行增删改命令。查询方法有2种:一个是ExecuteReader方法,返回一个DataReader对象。还有ExecuteScale方法,返回首行首列。

    3、 DataReader:读取数据源的数据,只允许对将数据源以只读、顺向的方式查看其中所存储的数据。

      用于从数据源中检索只读数据集,并且必须有连接时才可以用。

    4、 DataAdapter:数据适配器,对数据源执行操作并返回结果;

      在DataSet与数据源之间建立通信,将数据源中的数据写入DataSet中,或根据DataSet中的数据绑定数据源。

          DataAdapter使用中主要有4个命令对象比较重要。它们分别是:SelectCommand、InsertCommand、UpdateCommand、DeleteCommand.

           SelectCommand,主要是从数据库中检索数据,InsertCommand、UpdateCommand、DeleteCommand这3个命令对象主要负责把本地数据集DataSet中的数据上传回服务器。

           DataAdapter的Fill方法,用于使用DataAdapter的SelectCommand的结果来填充DataSet。

    5、 DataSet:内存中的数据库,是数据表的集合,它可以包含任意多个数据表。

       是ADO.NET的核心,相当于本地数据库,它与数据库无关的,它和远程数据库连接的桥梁就是.NET数据提供程序。它是由多个表构成,每个表都是一个DataTable对象。

        DataSet中主要的对象时DataTable,每一列都是DataColumn对象,每一行都是一个DataRow对象。在里面可以加入一些约束,一个是UniqueConstraint(唯一约束),一个是ForeignKeyConstraint(外键约束)。

        DataSet下面有两个重要的集合,一个是DataTables,一个是DataRelations.DataTables里面放置的都是DataTable对象。

    关系图:

    二、实践

      这里将对数据库的操作大致分为两类,一类是对数据库的查询,需要返回查询数据。一类是对数据库的增、删、改,不需要返回查询数据。下面就以这两类,结合实例说明。

    查询:从上图中可以看到,想得到查询结果有三种方式:

    • 通过Command对象的ExecuteScalar方法(),但是这种方法只能返回由查询返回的结果集中的第一行的第一列,并且其返回值为object类型,其他列或行将被忽略。 ExecuteScalar()经常使用于当需要返回单一值时的情况。例如你刚插入一行数据,想要立即知道它的ID号,则可以使用ExecuteScalar()方法。通过MSDN给出的一个例子说明。
    static public int AddProductCategory(string newName, string connString)
    {
        Int32 newProdID = 0;
        string sql = "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "+ "SELECT CAST(scope_identity() AS int)";
        using (SqlConnection conn = new SqlConnection(connString))
        {
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add("@Name", SqlDbType.VarChar);
            cmd.Parameters["@name"].Value = newName;
            try
            {
                conn.Open();
                newProdID = (Int32)cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        return (int)newProdID;
    }
    • 通过DataReader对象接收Command对象的ExecuteReader方法()的返回值,DataReader从数据库中检索只读、只进的数据流。 使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且(默认情况下)一次只在内存中存储一行,减少了系统开销。下面是MSDN实例。
    private static void ReadOrderData(string connectionString)
    {
        string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";//sql语句
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(queryString, connection);
            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            try
            {
                while (reader.Read())
                {
                    Console.WriteLine(String.Format("{0}, {1}",reader[0], reader[1]));
                }
            }
            finally
            {
                // 读完数据后,调用关闭
                reader.Close();
            }
        }
    }
    
    
    • 通过DataAdapter对象将查询到的数据填充到DataSet中。
    private void Button_Click(object sender, RoutedEventArgs e)
    {
                string conStr = "";//连接字符串
                using (SqlConnection conn = new SqlConnection(conStr))
                {
                    conn.Open();//打开连接
                    string sql = "";//sql语句
                    SqlDataAdapter sda = new SqlDataAdapter(sql,conn);//实例化SqlDataAdapter对象
                    DataSet ds = new DataSet();
                    sda.Fill(ds);//填充数据集
                }
    }
     

    添加、修改、删除,从上图中可以看到,有两种方式:

    • 通过Command对象的ExecuteNonQuery 方法 (),可以使用 ExecuteNonQuery来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句。
    private static void CreateCommand(string queryString,string connectionString)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(queryString, connection);
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
    }
    
    
    • 使用DataSet来更数据库中的数据。
    static private DataSet UpdateDataSet(string connectionString)
    {
        DataSet dataSet = new DataSet();//实例化数据集dataset
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();//打开连接
            SqlDataAdapter adapter = new SqlDataAdapter();//实例化SqlDataAdapter对象
            SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
            adapter.Fill(dataSet);//填充数据集dataset
            dataSet.Tables[0].Rows[0][0] = 2;//修改数据
            adapter.Update(dataSet);//更新dataset
        }
        return dataSet;
    }
  • 相关阅读:
    Extension Methods(扩展方法)
    linux面试题
    渗透测试 day4
    渗透测试 day3
    渗透测试 day2
    渗透测试 day1
    9.3 网络安全介绍
    9.2 Iptables
    8.30 进程管理
    8.29 linux的网络
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/6172203.html
Copyright © 2011-2022 走看看