`
zht1933
  • 浏览: 219069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ADO.NET中的五个主要对象

阅读更多
Connection 物件
   Connection 对象主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在ADO.NET 的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。

Command 物件
   Command 对象主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连结到数据源

DataAdapter 物件
   DataSetCommand 对象主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。在Beta 2 版中DataSetCommand 物件会更名为DataAdapter。

DataSet 物件
   DataSet 这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataSetCommand 对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataSetCommand 对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataSetCommand 对象当做DataSet 对象以及数据源间传输数据的桥梁。

DataReader 物件
   当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

ADO.NET   使用Connection   对象来连接数据库,使用Command   或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader   或   DataAdapter   ,然后再使用取得的DataReader   或DataAdapter   对象操作数据结果  
6.2.1   Connection   对象  
    建立Connection   对象的代码:  
OLEDB:     OleDbConnection   MyConnection=new   OleDbConnection();  
SQL:           SqlConnection       MyConnection=new   SqlConnection();  
◆他们的ConnectionString属性:获取或设置连接语句。   MyConnection.ConnectionString="server=(local);database=pubs;uid=sa;pwd=''";  
◆DataBase   属性:获取当前打开数据库  
◆DataSource属性:获取打开数据库的连接实例  
◆Open   方法:打开连接        
◆Close   方法:关闭连接  
6.2.2   Command与DataReader   对象  
Command   对象中包含了提交数据库系统的访问信息。OleDbCommand   与SqlCommand   对象,它们的基本对象和操作方法是相同的,在此介绍OleDbCommand的用法,SqlCommand的用法类推即可.  
如:   OleDbCommand     myComm   =   new   OleDbCommand(strQuery,myConnection);  
      第一个参数是sql语句或存储过程名,第二个参数是前面的Connection   对象的实例  
Command   对象的只要的属性和方法有:  
◆Connection   属性:设置或获取   Command对象使用的Connection   对象实例  
◆CommandText   属性:设置或获取需要执行的sql语句或存储过程名  
◆CommandType   属性:设置或获取执行语句的类型。它有3个属性值:StoredProceduce(存储过程)   TableDirect     Text(标准的SQL语句)   默认是Text  
◆Parameters   属性:取得参数值集合  
◆ExecuteReader   方法:执行CommandText指定的SQL语句或存储过程名,返回值类型为DataReader  
◆ExecuteNonQuery   方法:与ExecuteReader   功能相同,只是返回值为执行sql语句或存储过程受影响的记录行数  
DataReader   的主要属性和方法有:  
◆FieldCount   属性:显示当前数据记录的字段总和  
◆IsClosed     属性:   判断DataReader   对象是否已经关闭  
◆Close   方法:关闭DataReader   对象  
◆GetString方法:以String类型返回指定列中的值  
◆Getvalue   方法:以自身的类型返回指定列中的值  
◆Getvalues   方法:返回当前记录所有字段的集合  
◆Read   方法:将“光标”指向DataReader对象的下一记录  
   
Sql连接实例:  
<%@   Import   Namespace="System.Data"   %>  
<%@   Import   Namespace="System.Data.SqlClient"   %>  
<script   language="C#"   runat="server">  
void   Page_Load(Object   sender,   EventArgs   e)   {  
SqlConnection   Conn=new   SqlConnection();    
Conn.ConnectionString="server=(local);database=pubs;uid=sa;pwd=''";  
Conn.Open();  
SqlCommand   Comm=new   SqlCommand("select   *   from   Authors   ",Conn);  
SqlDataReader   dr=Comm.ExecuteReader();        
dg.DataSource=dr;  
dg.DataBind();  
Conn.Close();  
}  
</script>  
<asp:DataGrid   id="dg"   runat="server"   />  
Aeccess   数据库连接实例   (OleDbCommand   和   OleDbDataReader   使用实例)  
<%@   Page   Language="C#"   %>  
<%@   Import   Namespace="System.Data"%>  
<%@   Import   Namespace="System.Data.OleDb"%>  
<script   Language="C#"   Runat="Server">  
OleDbDataReader   dr;  
public   void   Page_Load(Object   src,EventArgs   e)  
{  
    string    
   
myConnstring="provider=Microsoft.Jet.OLEDB.4.0;   Data    
   
Source="+Server.MapPath(".")+"..\\DataBase\\db2.mdb;";  
string   strSel="Select   *   from     BookMark";  
OleDbConnection   myConn=   new   OleDbConnection  
   
(myConnstring);  
OleDbCommand   myComm=new   OleDbCommand(strSel,myConn);    
myComm.Connection.Open();  
dr=myComm.ExecuteReader();    
dg.DataSource=dr;  
dg.DataBind();  
myConn.Close();  
}  
</script>  
<html>  
<body>  
<form   Runat="Server">  
<asp:DataGrid   id="dg"   runat="server"   />  
</form>  
</body>  
</html>  
   
++++++++++++++++++++++++++++++++++++++++++++++++  
++++++++++++++++++++++++++++++++++++++++++++++++

6.3.3   DataSet   与DataAdapter  
DataReader   对象只能实现对数据的读取,不能完成其他的操作

DO.NET提供一款更强大的数据操作对象――DataSet   可以将DataSet看成一个非连接的数据库,因为DataSet的内部存储结构与数据库很类似,拥有数据表(DataTable)数据表关联(DataRelation)。DataSet中可以存储多张表等。DataSet拥有类似于数据库的结构,但它并不等同于数据库。首先他可以存储来自数据库的数据,而且还可以存储其他格式的数据,比如   XML格式文档;  
1.查询数据  
讲到DataSet的数据库应用,先要了解ADO.NET中的另一个对象DataAdapter   .  
它也分为SqlDataAdapter   和OleDbDataAdapter  
建DataAdapte:  
OleDbDataAdapter     MyAdapter=new   OleDbDataAdapter();  
SqlDataAdapter           MyAdapter=new   SqlDataAdapter();  
取得的DataAdapter   对象时必须赋予一个连接对象:  
MyAdapter.SelectCommand.Connection   =   MyConn;   或  
MyAdapter.UpdateCommand.Connection   =Myconn;   或  
MyAdapter.DeleteCommand.Connection   =   MyConn;   或  
MyAdapter.InsertCommand.Connection   =Myconn;  
如果需要执行SQL语句,那么还必须给相应的CommandText   属性赋值。代码为:  
MyAdapter.*Command.CommandText   =   SQL语句;  
写这么多行代码似乎有些麻烦,如果你只是查询数据库,则可以在建立   DataAdapter实例时就完成上述工作。  
OleDbDataAdapter   MyAdapter   =   new   OleDbDataAdapter(strSelect,objConnection);  
<%@   Page   Language="C#"   Runat="Server"%>  
<%@   Import   Namespace="System.Data"%>  
<%@   Import   Namespace="System.Data.OleDb"%>  
<script   Language="C#"   Runat="Server">  
public   void   Page_Load(Object   src,EventArgs   e)  
{  
    string    
   
MyConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data    
   
Source="+Server.MapPath(".")+"\\DataBase\\db3.mdb;";  
string   strSel="select   *   from   Score";  
//建立一个DataSet   实例  
DataSet   ds=new   DataSet();  
OleDbConnection   MyConn=   new   OleDbConnection(MyConnString);  
OleDbDataAdapter   MyAdapter   =   new   OleDbDataAdapter(strSel,MyConn);  
MyAdapter.Fill(ds,"Score");  
dg1.DataSource=ds.Tables["Score"].DefaultView;  
dg1.DataBind();  
}  
</script>  
<asp:DataGrid   id="dg1"   runat="Server"    
    Headerstyle-BackColor="#aaaadd"  
    AlternatingItemstyle-BackColor="#eeeeee"  
/>  
将DataAdapter   于   DataSet   相联系的是   DataAdapter   对象的   Fill   方法。他有很多中用法:     MyDataAdapter.Fill(DataSet)                 MyDataAdapter.Fill(DataSet,TableName)  
MyDataAdapter.Fill(DataSet,   StartRow   ,   RowsCount,   TableName)  
DataSet   绑定至   DataGrid   控件显示:  
1.dg1.DataSource=   ds.Tables[“Score”].DefaultView;  
dg1.DataBind();  
2.dg1.DataSource=ds;  
dg1.DataMember=”Score”;  
dg1.DataBind();  
提示:   DataSet中的各种集合,访问子项有两种方法,一种是用子项的名,一种是用数字索引.比如要访问表”Score”,可以用:   DataSet.Tables[0]   访问   (多张表依次类推)  
   
2.   插入数据:   DataSet   的结构和数据库相似,所有插入数据实质上就是在DataSet   的数据表里插入一行(DataRow)  
//新建一行  
DataRow   dr=   ds.Tables[“Score”].NewRow();  
                dr.   [“Name”]   =   “addme”;  
                dr.   [“class”]   =”201”;  
ds.Tables[“Score”].Rows.Add(dr);     //将新建的行加到DataTable   的DataRow集合中  
这样对DataSet的操作仅仅是在DataSet中执行,并不影响数据库中的数据,要使用DataAdapter   的   Update   方法(有多种方法).  
    1.   DataAdapter.Update(DataSet)   ;       2.   DataAdapter.Update(DataSet,   TableName);  
3.更新数据:   实际就是在DataSet   数据行上面直接修改数据  
DataRow   dr   =   ds   .Tables[“Score”].Rows[0];     //取出第一行  
dr.   [“Name”]   =   “比尔”;     //修改  
                dr.   [“class”]   =”201”;  
如果要更新数据库,则再调用   Update   方法        
4.删除数据:   找到相应的数据行,然后删除  
DataRow   dr   =ds.Tables[“Score”].Row[0];     dr.Delete();  
注意:   DataAdapter   对象在数据发生改变时,并不能自动产生数据库系统所需的交易sql语句,所有要建立一个CommandBuilder   对象   它能自动产生交易的sql语句.  
OleDbCommandBuilder   custcb   =   new   OleDbCommandBuilder(MyAdapter);  
5.DataSet   的其他特征  
DataSet   、DataTable   和DataRow   都有一个十分有用的方法----RejectChanges,  
它时操作对象拒绝已经发生的改变,将数据复原.该方法于AcceptChanges   HasErrors等属性连用非常有用.  
If   (DataSet.HasErrors)  
{  
    DataSet.RejectChanges();  
}  
else  
{  
    DataSet.AcceptChanges();


  在前面一讲中,我们应该已经熟悉了如何使用DataAdapter对象来进行数据更新(在前面一篇如何处理出错里面写了一个简单的例子),下面我们先进行一下总结,然后再讲解一下通过Command对象如何更新数据。

          一、通过DataAdpater对象的Update方法

          DataAdapter对象的update方法可以调用来讲Dataset中的更改解析回数据源。其工作原理本质上还是通过执行所引用的Command对象进行更新的。当调用Update方法的时候,DataAdpater将分析出已经发生的变化,并执行相应的命令(insertCommand、updateCommand或者deleteCommand)。因此,要提供性能,就要尽可能的显示设置DataAdpater的命令。

           当然,如果DataTable映射到单个数据表上,或者它是由单个表填充生产的,也可以利用CommandBuilder对象自动生成DataAdapter的DeleteCommand、InsertCommand和UpdateCommand。其方法是:先生成SqlCommandBuilder对象:SqlCommandBuilder scb=new SqlCommandBuilder(sqlDataAdpater);这样,就能够自动通过CommandBuilder来设置适配器sqlDataAdapter的命令形式:类似于sqlDataAdpter.UpdateCommand=scb.getUpdateCommand()   。

          如果使用OleDb、Odbc、Oracle连接数据库,只需要做相应的调整就行了。

          在使用CommandBuilder为DataAdapter生成Command命令更新数据源时,需要注意以下事项:

1、SelectCommand使用的select命令中必须包含主键(其实在数据表中如果声明了主键即可)

2、填充数据集时,必须要加载主键。方法如下:

             da.Fill(ds, "dataTableName");

             ds.Tables["dataTableName"].PrimaryKey=new DataColumns[]{ds.Tables["dataTableName"].Columns["ColulmnsName"]};

        或者也可以这么做:

            da.FillSchema(ds, SchemaType.Source, "dataTableName");      //加载表结构

            da.Fill(ds, "dataTableName");                                                      //加载表数据

3、DataAdapter的MissingSchemaAction属性设置为AddWithKey

4、更新数据源成功后,使用ds的Acceptchanges方法,更新数据集。



          二、通过Command对象进行更新

下面举个使用适配器进行数据更新的例子。

首先,为了不破坏了SQL2005上原有的示例数据库的数据,我们先使用“select * into salesreason from sales.salesreason”,将sales.salesreason表复制一份到dbo.salesreson中去。然后就对dbo.salesreson进行操作。下面是界面设计图。

几个控件:customerid后面的的文本框 textBox1,下面分别是textBox2、textBox3以及右下角的textBox4.

几个按钮:“数据插入”名为button1,下面依次是button2、button3;“< <”是button4,右边依次是5/6/7

“查找”是button8.

下面是详细代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        int i = 0; //用i来确定其坐在数据表的行号。一开始时i=0,则是表中的第一行
        DataSet ds;
        SqlDataAdapter sda;
        string strcon = "Data Source=localhost; Initial Catalog=adventureWorks; Integrated Security=sspi";
        string strsql = "select SalesReasonID,name,ReasonType from dbo.SalesReason";
        SqlConnection scon;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            scon = new SqlConnection(strcon);

        }
        public void show(int i)
        {
            if (ds != null)
            {
                ds.Clear();
            }
            else
            {
                ds = new DataSet();
                sda = new SqlDataAdapter(strsql,strcon);
            }
            sda.Fill(ds, "SalesReason");
            textBox1.Text = ds.Tables["SalesReason"].Rows[i]["SalesReasonID"].ToString();
            textBox2.Text = ds.Tables["SalesReason"].Rows[i]["Name"].ToString();
            textBox3.Text = ds.Tables["SalesReason"].Rows[i]["ReasonType"].ToString();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            i = 0;
            show(i);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            if (i != 0)
            {
                i--;
                show(i);
            }
            else
                MessageBox.Show("已经是第一条记录了");
        }

        private void button6_Click(object sender, EventArgs e)
        {
            if (i < ds.Tables["SalesReason"].Rows.Count - 1)
            {
                i++;
                show(i);
            }
            else
                MessageBox.Show("已经是最后一条记录了");
        }

        private void button7_Click(object sender, EventArgs e)
        {
            i=ds.Tables["SalesReason"].Rows.Count - 1;
            show(i);
        }

        private void button8_Click(object sender, EventArgs e)
        {
            int k = 0;//用来确定要查找记录的下标
            if (textBox4.Text.Trim() == "")
            {
                MessageBox.Show("查找内容不能为空");
            }
            else
            {
                for (k = 0; k < ds.Tables["SalesReason"].Rows.Count; k++)
                {
                    if (ds.Tables["SalesReason"].Rows[k]["SalesReasonID"].ToString() == textBox4.Text)
                    {//找到了和textBox4中的id号相匹配的记录了,其行号为k
                        i = k;
                        show(i);
                        break;
                    }
                }
            }
            if (k == ds.Tables["SalesReason"].Rows.Count)
                MessageBox.Show("无此客户信息");
            textBox4.Text = "";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SqlCommand sqlcmd = new SqlCommand("select count(*) from sales.SalesReason where SalesReasonID='" + textBox1.Text + "'", scon);
            sqlcmd.Connection.Open();
            int a = (int)sqlcmd.ExecuteScalar();//返回源表中与输入的客户id相等的个数
            sqlcmd.Connection.Close();

            if (a > 0)
            {
                MessageBox.Show("此客户已经存在,请重新插入");
                return;
            }
            ds.Clear();
            sda.Fill(ds, "SalesReason");
            ds.Tables["SalesReason"].PrimaryKey = new DataColumn[] { ds.Tables["SalesReason"].Columns["SalesReasonID"] };
            SqlCommandBuilder sqlCommandBuilder1 = new SqlCommandBuilder(sda);

            DataRow dr = ds.Tables["SalesReason"].NewRow();
            dr["SalesReasonID"] = Int32.Parse(textBox1.Text);
            dr["name"] = textBox2.Text;
            dr["ReasonType"] = textBox3.Text;

            ds.Tables["SalesReason"].Rows.Add(dr);
            sda.Update(ds, "SalesReason");
            ds.AcceptChanges();
            MessageBox.Show("数据插入成功");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            for (int j = 0; j < ds.Tables["SalesReason"].Rows.Count; j++)
            {
                if (ds.Tables["SalesReason"].Rows[j]["SalesReasonID"].ToString() == "" &&
                    ds.Tables["SalesReason"].Rows[j]["SalesReasonID"].ToString() != ds.Tables["SalesReason"].Rows[i]["SalesReasonID"].ToString())
                {
                    MessageBox.Show("此SalesReasonid已经存在,请重新输入");
                    textBox1.Text = "";
                    return;
                }
            }
            ds.Clear();
            sda.Fill(ds, "SalesReason");
            ds.Tables["SalesReason"].PrimaryKey = new DataColumn[] { ds.Tables["SalesReason"].Columns["SalesReasonID"] };
            SqlCommandBuilder sqlCommandBuilder1 = new SqlCommandBuilder(sda);
            ds.BeginInit(); //挂起修改数据
            ds.Tables["SalesReason"].Rows[i]["SalesReasonID"] = Int32.Parse(textBox1.Text);
            ds.Tables["SalesReason"].Rows[i]["Name"] = textBox2.Text;
            ds.Tables["SalesReason"].Rows[i]["ReasonType"] = textBox3.Text;
            ds.EndInit(); //结束挂起
            sda.Update(ds, "SalesReason");
            ds.AcceptChanges();
            MessageBox.Show("数据修改成功");

        }

        private void button3_Click(object sender, EventArgs e)
        {
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(strsql,strcon);
            da.Fill(ds, "SalesReason");
            ds.Tables["SalesReason"].PrimaryKey = new DataColumn[] { ds.Tables["SalesReason"].Columns["SalesReasonID"] };
            SqlCommandBuilder sqlCommandBuilder1 = new SqlCommandBuilder(da);
         //   da.DeleteCommand = sqlCommandBuilder1.GetDeleteCommand();

            ds.Tables["SalesReason"].Rows[i].Delete();
            da.Update(ds,"SalesReason");

            ds.AcceptChanges();
            MessageBox.Show("数据删除成功");
            i = 0;
            show(i);//删除成功后,重新显示第一条数据
        }
    }
}

如果使用SQL Command的方式来直接更新数据源,写起来就更简单了,举个例子,拿前面删除部分的例子来举例好了:

        private void button3_Click(object sender, EventArgs e)
        {
             SqlCommand cmd=new SqlCommand();

             cmd.Connection=scon;

             cmd.CommandText="delete from dbo.SalesReason where SalesReasonID=' "+textBox1.Text+" ' ";

             scon.Open();

            cmd.ExecuteNonQuery();

            scon.Close();      //更新完毕,下面代码刷新显示,将记录定位到第一行

            i=0;        refresh();

            show(i);

             MessageBox.Show("数据删除成功");

            refresh();
        }



分享到:
评论

相关推荐

    ADO.NET程序设计模拟题

    ADO.NET 模型中的下列哪些对象属于Connected 对象? A. Connection B. DataAdapter C. DataReader D. DataSet 正确答案:ABC 2 在ADO.NET 中,为访问DataTable 对象从数据源提取的数据行。可使用DataTable 对象的__...

    ADO.NET中常用的对象

    ADO.NET中常用的对象。我们必须记得这个对象

    11:ADO.NET_Command、DataReader对象和操作

    11:ADO.NET_Command、DataReader对象和操作

    ADO.net操作数据库总结

    ADO.net操作数据库总结,包括SqlConnection、SqlCommand等

    ADO.NET常用对象

    在ADO.NET结构中,常用的组件(对象)有五个,Connection对象、Command对象、DataReader对象、DataApdapter对象和DataSet对象,其中Connection对象、Command对象、DataReader对象,和DataApdapter对象被称为数据提供...

    ADO.NET对象模型访问数据库

    ADO.NET对象模型访问数据库,详细讲述ADO.NET对象模型,个人觉得很实用。

    ADO.NET中一些重要的概念

    关于ADO.NET的命名空间有哪些,ADO.NET架构.ADO.NET中的两个基本对象,Data reader和DataSet有什么区别,ADO.NET和传统ADO主要有什么区别,连接(Connection)对象有什么作用 等等的说明

    ADO.net入门简介

    ADO.net入门简介 ADO.net 对象模型 .Net数据提供程序

    ado[1].net中文手册 学习 ado.net的重要资料

    使用 ADO.NET 连接到数据源:描述 ADO.NET Connection 对象,并说明如何使用它来连接到数据源。 执行命令:描述 ADO.NET Command 对象,并说明如何使用它来对数据源执行查询和命令。 使用 DataReader 检索数据:描述 ...

    ADO.NET技术内幕 part4

    第Ⅲ部分包含了对ADO.NET对象模型中的脱机对象的讨论——DataSet、DataTable、DataColumn、DataRow、DataRelation和DataView对象。这一部分还介绍了使用DataAdapter向数据库提交更改的基本和高级场景,还讨论了ADO...

    《零基础学ASP.NET 2.0》第13章 ADO.NET 2.0对象

    13.1.2 ADO.NET中的对象 212 13.2 Connection对象 212 13.3 Command对象 215 13.3.1 插入数据 215 13.3.2 查询数据 217 13.3.3 更新数据 219 13.3.4 删除数据 222 13.3.5 返回单个值 224 13.4 DataReader对象 225 ...

    ADO.NET数据库访问技术详细资料

    ADO.NET是与数据库访问操作有关的对象模型的集合,它基于Microsoft的.NET Framework,在很大程度上封装了数据库访问和数据操作的动作。 ADO.NET同其前身ADO系列访问数据库的组件相比,做了以下两点重要改进: ...

    ADO.NET本质论.pdf

    书中深入剖析了ado.net的本质,探索了类、接口、属性和方法的工作原理,同时还为其他数据访问api(包括oledb,ado,odbc和jdbc)的程序员,提供了有价值的参考材料。本书适合具有一定数据库基础的开发人员阅读,也可...

    最容易学的ADO.NET常用对象详解(头发乱了的学习笔记 - 博客园--转载)

    · 几种常见的数据库连接方法 · ADO.NET常用对象详解之:DataSet对象 · ADO.NET常用对象详解之:DataReader对象 · ADO.NET常用对象详解之:Command对象 · ADO.NET常用对象详解之:DataAdapter对象...

    ado.net读写Oracle大对象

    一个利用Ado.net读写oracle大对象数据类型blob,clob的例子源码。

    ado.net Connection连接对象

    ado.net Connection连接对象 pdf

    ADO.NET框架介绍

    对ado.net的基本描述,有ado.net的五大对象,

    实验七 ADO.NET管理数据库

    本实验将通过创建一个的“C#学习网”,使同学们掌握ASP.NET服务器验证控件、ADO.NET对象的使用方法,并初步熟悉数据绑定控件GridView。该网站各页的效果图如图7-1、7-2、7-3、7-4、7-5、7-6、7-7、7-8所示。大体上...

    趣味理解ADO.NET对象模型

    ADO.NET是微软新一代.NET数据库的访问架构,ADO是ActiveX Data Objects的缩写。ADO.NET是数据库应用程序和数据源之间沟通的桥梁,主要提供一个面向对象的数据访问架构,用来开发数据库应用程序。

Global site tag (gtag.js) - Google Analytics