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);
                }
            }


  • posted @ 2012-09-29 17:47  美梦成真  阅读(1234)  评论(0编辑  收藏  举报