ADO.NET学习

    这几天一直在学习ADO.NET的一些知识,现对ADO.NET数据库访问做个小结,以便和大家交流学习.

    要使用ADO.NET提供的数据库访问对象,必须首先在应用程序的开始引用两个命名空间:System.Data和System.Data.SqlClient。请注意这两个命名空间是不同的命名空间,前者不包括后者。System.Data 命名空间提供对表示 ADO.NET 结构的类的访问。通过 ADO.NET 可以生成一些组件,用于有效管理多个数据源的数据。比如我们经常使用的dataset类和datatable类就是由这个命名空间里面的类所提供的。而System.Data.SqlClient命名空间是sql server的数据库的.net framework数据提供程序。我们平常使用的SqlConnection,SqlCommand,SqlDataAdapter和SqlDataReader对象都是有这个命名空间提供。
SqlConnection。用于连接到SQL Server数据库和管理对数据库的事务。
SqlCommand。用于对SQL Server数据库发出 SQL 命令。 可以使用 ExecuteNonQuery ()来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet的情况下更改数据库中的数据。
SqlDataReader。用于从 SQL Server 数据源读取只进数据记录流。

若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader方法,而不要直接使用构造函数。并且,SqlDataReader只有在保持数据库连接的状态下(SqlConnection对象显示的执行Open())才能从数据库中读取数据。

DataSet。用于对单层数据、XML 数据和关系数据进行存储、远程处理和编程。 DataSet在SqlDataAdapter对象调用Fill()方法之后就断开了与数据库的连接。它好比是数据库在内存中的一份拷贝。我们可以编程对里面数据进行任何操作,而不用理会数据的驻留位置。所有来自于数据库、XML 文件、代码或用户输入的数据都可添加到 DataSet 对象中。由于对 DataSet 进行了更改,所以在更新源数据之前可以对这些更改进行跟踪和验证。只有当SqlDataAdapter执行Update()时才将修改反应到数据库中。
SqlDataAdapter。数据库与DataSet对象之间的桥梁,可以隐式地打开数据库连接。用于将数据推入 DataSet,并使数据与数据库保持一致。

下面就举一个获取Album表所有专辑的名称信息的例子来说明这些对象的具体应用。

一般我们将对SQL Server数据库中某一张表的访问和操作的代码放在一个cs文件中,也即放在同一个类中。

首先我们在这个ADO.NET数据访问类里面声明我们来使用的几个对象的引用变量。注意这里仅仅是声明,并没有进行实例化。

private SqlConnection sqlconn;

private SqlCommand sqlcmd;

private SqlDataReader sqlreader;

/// <summary>
/// 获取专辑表中的所有专辑名
/// </summary>
public void GetAlbum()
{

string sql = "Select title from album";

sqlconn = new SqlConnection();
sqlconn.ConnectionString = ConfigurationManager.ConnectionStrings["Mu"].ConnectionString;

sqlcmd = new SqlCommand();
sqlcmd.Connection = sqlconn;
sqlcmd.CommandText = sql;

try
            {
                sqlcmd.Connection.Open();
                sqlreader = sqlcmd.ExecuteReader();

   //SqlDataReader.HasRows属性
   //获取一个值,该值指示SqlDataReader是否包含一行或多行               

    if (sqlreader.HasRows)
                {

                   //SqlDataReader的Read()一次只向前读一条记录
                    while (sqlreader.Read())
                    {
                        Console.WriteLine("专辑名称" + sqlreader["title"].ToString());
                    }
                }
                else
                {
                    Console.WriteLine("没有检索到专辑名称信息!");
                }
  }         
            catch (SqlException exp)
            {
                Console.WriteLine("数据库未连接上或者读取的数据行已锁定,请确认已连接上sql server数据库或读取的数据行未加锁!具体信息如下:{0}",exp.Message);
            }
            finally
            {
                sqlcmd.Connection.Close();
            }
    }

  而在VS2008下面,为了提高开发效率,已经把dataset对象做成了一个控件,我们只要拖拽控件,图形化的进行设置,只要在Main()里面写少量的代码,就可以实现了,大大减少了代码的编写量!

获取专辑的详细信息只需要在Main()中添加如下的代码:

albumTableAdapter adapter = new albumTableAdapter();
        Mu.albumDataTable datatable = adapter.GetAlbum();
        if (datatable.Rows.Count == 0)
        {
            Console.WriteLine("没有找到查询结果!");
        }

        else
        {
            Mu.albumRow dataRow = datatable[0];
            try
            {
                Console.WriteLine(string.Format("专辑编号:{0}\n专辑名称:{1}\n歌手名:{2}\n价格:{3}\n所属标签:{4}\n发布日期:{5}\n排名:{6}", dataRow.asin, dataRow.title, dataRow.artist, dataRow.price, dataRow.rdate, dataRow.label, dataRow.rank));
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }


转载于:https://www.cnblogs.com/jerry01/archive/2012/09/29/1577045.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值