zoukankan      html  css  js  c++  java
  • ADO.NET 基础知识

    1、与ODBC,OLE DB。ADO 可访问非关系DB多种接口,可访问关系型数据库。

    2、ODBC提供了一组对数据库访问的标准API(应用程序编程接口),处理底层数据,让高层不用例会那种数据库接口。ODBC的数据源就是Access、MSSQl、Oracle、MYSQL

    3、ODBC就是一种分层思想,OLE DB操作ODBC
    OLE DB标准时实现一组C++API函数,OLE DB符合COM标准、基于对象的。

    4、(类似DAO和RDO)ADO是一种对象模型,实现与语言无关,ADO出现了OLEDB标准的API事C++API,只能提供C++语言调用。****************ADO是对oledb数据源存取API的封装,底层API效率好,不易使用,封装越高越容易使用。

    5、ADO和ADO.NET是两种数据访问方式
    *****************************显著区别是后者全面支持XML数据呈现
    *****************************ADO.NET是托管代码库,提供简单灵活的架构
    ADO使用OLE DB接口并基于微软的COM技术(COM是开发软件组件的一种方法,一些小的二进制可执行程序,COM组件是符合COM规范的小组件)
    ADO.NET拥有自己的ADO.NET接口并基于.NET体系,基于XML格式,不需要再做COM编排导致的数据类型转换。

    6、System.Data.SqlClient;
    System.Data.Linq;

    7、Connection;Command使用对象向数据源发出命令;
    ConmmandBuilder用于生成用于更新sql的语句,不必自己创建;(只能更新一个表,表中必须设置 主键,如果数据集是多表关联,则不可用此方法自动更新)

    用法:有时候需要缓存的时候,进行一系列的操作最后一并提交数据库 ************************************************************************************
    DataReader;轻量级,读取只能向前和只读的数据流
    DataAdapter;执行对数据源的各种操作

    8、DataSet(DataTable(DataRow,DataColumn),DataRelation)

    9、SqlDataReader thisReader=thisCommand.ExcuteReader();
    while(thisReader.Read())
    {
    Console.WriteLine(" {0} {1}",thisReader["CustomerID"],thisReader["CompanyName"]);
    }

    10、Oracle using System.Data.OracleCline;
    Access using System.Data.OleDb;
    无 using System.Data.Odbc;

    11、DataSet对象只有一个Tables属性,填充了后才才能访问行列
    myDataSet.Tables["Customrs"].Rows[n]["CompanyName"];

    12、SqlDaraAdapter一般用于查询,使用的时候不用con.open(),直接将数据fill到dataset中
    SqlCommand 一般用于非查询,也可以用于查询。需要con.open(),使用完要关闭

    13、SqlDataAdapter thisAdapter=new SqlDataAdpter("Select CutomerID,CompanyName From Customers",thisConnection);
    SqlCommandBuilder thisBuilder=new SqlCommandBuilder(thisAdapter);
    DataSet thisDataSet=new DataSet();
    thisAdapter.Fill(thisDataSet,"Customers");
    ---------------------------------------填充完了DataSet后就可以访问其中的行和列了
    Console.WriteLine("name before change:{0}",thisDataSet.Tables["Customer"].Rows[9] ["CompanyName"]);

    14、DataRow thisRow=thisDataSet.Tables["Customer"].NewRow();
    thisRow["CustomerID"]="ZACIZ";
    thisRow["CompanyName"]="Zachary Ztither ltd";
    thisDataSet.Tables["Customers"].Rows.Add(thisRow);
    Console.WriteLine("#rows after change:{0}",thisDataSet.Tables ["Customers"].Rows.Count);

    15、DataSet是内存中非连接的数据副本,DataAdapter负责连接到磁盘上的数据库,因此需要调用它的
    Update()方法才能使DataSet中的内存数据与磁盘上的数据同步。

    16、DataTable对象Row集合提供了Find(); 来检查要添加的行是否已经存在,若为空则进行更改。

    ???????????????????????????????????????
    17、Delete();方法不用来删除行,仅仅用来标记将要删除的行。

    18、DataRelation用于描述DataSet中的多个DataTables对象的关系。每个对象都包含DataRelations的Relations集合,以查找和操纵相关的表。

    19、DataSet中访问多个表
    -----------------------------------------------------------------------------------
    DataSet thisDataSet=new DataSet();
    SqlDataAdapter custAdapter=new SqlDataAdapter("Select * from Customers",thisConnect);
    SqlDataAdapter orderAdapter=new SqlDataAdapter("Select *form Orders",thisConnect);
    custAdapter.Fill(thisDataSet,"Customers");
    orderAdapter.Fill(thisDataSet,"Orders");
    -----------------------------------------------------------------------------------
    DataRelation custOrderRel=thisDataSet.Relations.Add("Customer",
    thisDataSet.Tables["Customer"].Columns["CustomerID"]
    thisDAtaSet.Tables["Customer".Columns["CustomerID"]]);//创建DataRelation并连到DataSet

    20、ADO.NET中XML主要集中于DataSet对象,因为XML主要关注的是关系和分层的结构话数据。
    DataSet中有7个用于处理XML的方法,最容易使用的是WriteXml();
    thisDataSet.WriteXml("nwinddata.xml");
    ReadXml()方法也可以用于将XML文件的内容读取到DataSet中

    21、ExecuteScalar()要从sql查询中返回一个值
    ExecuteNonQuery()类似Insert、Update、Delete的数据修改操作

    22、调用存储过程
    SqlCommand thisCommand=thisConnection.CreateCommand();
    thisCommand.CommandType=CommandType.StoredProduce;
    thisCommand.Command.Text="Ten Most Expensive Producets";
    SqlDataReader thisReader=thisCommand.ExecuteReader();
    while(thisReader.Read())
    {
    Console.WriteLine(" {0} {1}",thisReader{"TenMostExpensiveProducts",thisReader ["UnitePrice"]});
    }
    thisReader.Close();
    23、ExecuteNonQuery();执行命令,返回影响的行数。int rowsReturned=com.ExecuteNonQuery;
    ExecuteReader();执行命令返回一个类型化的IDataReader;
    ExecuteScalar();执行命令,返回结果集中第一行第一列的值。
    SqlCommand cmd= new SqlCommand(str,con);
    object o=cmd.ExecuteScalar();
    Console.WriteLine(o);
    24、ExecuteXmlReader();只用于SqlClient提供程序
    给调用者返回一个XmlReader对象
    Using System.Xml;//必须导入命名空间

    public static void Main(string [] args)
    {
    string source="连接字符串";
    string select="select * from Works"
    SqlConnection conn=new SqlConnetion(source);
    conn.open();
    SqlCommand cmd=new SqlCommand(select,conn);
    XmlReader xr=cmd.ExecuteXmlReader();
    xr.Reader();
    string data;
    do
    {
    data=xr.ReadOuterXml();
    if(!string.IsNullOrEmpty(data))
    Console.WriteLine(data);
    }while(!string.IsNullOrEmpty(data));
    conn.close();
    }

    25、DataColumn customerID=new DataColumn("CustomerID",typeof(int));
    CustomerID.AllowDBNull=false; //设置不可以为空
    CustomerID.ReadOnly=false;
    CustomerID.AutoIncrement=true; //自动增长
    CustomerID.AutoIncrementSeed=1000;// 最初的种子值;递增量默认为1 AutoIncrementStep
    //DefaultValue可以定义列的默认值;Expression定义所计算的列中使用的表达式
    DataColumn name=new DataColumn("Name",typeof(string));
    name.AllowDBNull=false;
    name.Unique=true;

    26、访问数据行用DataRow来访问,需要引入SqlDataAdapter类
    SqlDataAdapter da=new SqlDataAdapter(select,conn);
    DataSet ds=new DataSet();
    da.Fill(ds,"Customers");
    ---------------------------使用DataRow类的索引器访问数据行的值,遍历
    foreach(DataRow row in ds.Tables["Customers"].Rows)
    Console.WriteLine("'{0}'from {1}",row[0],row[1]);
    --------------------------------------ds.Tables[表名].Rows[行][列]

    27、给数据表添加架构(列),没有包含可空的列,这个仅限于内存,不是添加到数据库中。
    DataTable products=new DataTable("Products");
    Products.Columns.Add(new DataColumn("ProductID",typeof(int)));
    Products.Columns.Add(new DataColumn("ProductName",typeof(int)));
    ds.Tables.Add(products);
    Products.Columns.Add(new DataColumn("Supplier",typeof(int)));

    28、DataRow中的版本功能,可以接收某一特定行上指定列的各个值
    Current 列中目前存在的值,如果没有进行编辑,该值与初值相同,如果编辑了,该值就是最后有效值
    Default 列的任何默认值设置
    Original 最初从数据库中出来的列值,如果调用DataRow类的AcceptChanges方法,该值更新为Current
    Proposed

    29、fo

  • 相关阅读:
    python基础之lambda,sort,filter,map,递归函数的运用
    python基础之生成器,生成器函数,列表推导式
    python基础之函数名的使用,闭包以及迭代器
    移动端自带框架
    app自动化环境部署和原理
    夜神模拟器连接不上adb
    Appium下载和配置
    word如何添加下滑线
    loadrnner组成
    性能测试
  • 原文地址:https://www.cnblogs.com/d685600/p/3650356.html
Copyright © 2011-2022 走看看