首页 > 编程 > .NET > 正文

ADO.NET2.0跟ADO.NET3.0的一些新特性简要介绍

2024-07-10 13:04:45
字体:
来源:转载
供稿:网友

觉得很多人在写关于asp.net2.0的东东,很少有人写关于ado.net2.0的新特性。查找了一下msdn,给大家介绍几点好了。(如果需要察看所有ado.net2.0的新特性,请查看

http://msdn2.microsoft.com/en-us/library/ex6y04yf.aspx)

server enumeration

用来枚举活动状态的sql server实例,版本需要在sql2000及更新版本。使用的是sqldatasourceenumerator类

可以参考以下示例代码:

using system.data.sql;

class program
{
  static void main()
  {
    // retrieve the enumerator instance and then the data.
    sqldatasourceenumerator instance =
      sqldatasourceenumerator.instance;
    system.data.datatable table = instance.getdatasources();

    // display the contents of the table.
    displaydata(table);

    console.writeline("press any key to continue.");
    console.readkey();
  }

  private static void displaydata(system.data.datatable table)
  {
    foreach (system.data.datarow row in table.rows)
    {
      foreach (system.data.datacolumn col in table.columns)
      {
        console.writeline("{0} = {1}", col.columnname, row[col]);
      }
      console.writeline("============================");
    }
  }
}

dataset enhancements

新的datatablereader类可以说是一个dataset或者datatable,的一个或者多个的read-only, forward-only的结果集。需要说明的是,datatable返回的datatablereader不包含被标记为deleted的行。

示例:

private static void testcreatedatareader(datatable dt)
{
    // given a datatable, retrieve a datatablereader
    // allowing access to all the tables' data:
    using (datatablereader reader = dt.createdatareader())
    {
        do
        {
            if (!reader.hasrows)
            {
                console.writeline("empty datatablereader");
            }
            else
            {
                printcolumns(reader);
            }
            console.writeline("========================");
        } while (reader.nextresult());
    }
}

private static datatable getcustomers()
{
    // create sample customers table, in order
    // to demonstrate the behavior of the datatablereader.
    datatable table = new datatable();

    // create two columns, id and name.
    datacolumn idcolumn = table.columns.add("id", typeof(int));
    table.columns.add("name", typeof(string));

    // set the id column as the primary key column.
    table.primarykey = new datacolumn[] { idcolumn };

    table.rows.add(new object[] { 1, "mary" });
    table.rows.add(new object[] { 2, "andy" });
    table.rows.add(new object[] { 3, "peter" });
    table.rows.add(new object[] { 4, "russ" });
    return table;
}

private static void printcolumns(datatablereader reader)
{
    // loop through all the rows in the datatablereader
    while (reader.read())
    {
        for (int i = 0; i < reader.fieldcount; i++)
        {
            console.write(reader[i] + " ");
        }
        console.writeline();
    }
}

binary serialization for the dataset

关于这点linkcd已经写过一篇性能测试的文章:.net 2.0 下data container性能比较: binary serialize dataset vs custom classes

datatable as a stand-alone object

很多以前dataset的方法,现在可以用datatable直接使用了

create a datatable from a dataview

现在可以从dataview返回一个datatable了,两者基本是一样的,当然你也可以有选择性的返回,比如说返回distinct rows

new datatable loading capabilities

datatables跟datasets现在提供一个新的load方法,可以直接把datareader中的数据流载入到datatable中,当然你也可以对如何load做一些选择。
 
以上是ado.net2.0的一些特性,你使用.net2.0进行开发,就可以使用这些特性。

更激动人心的在于ado.net3.0的一些特性.

有文章介绍了一些ado.net3.0 augut ctp的一些特性:

the ado.net entity framework

the entity data model (edm),实体数据模型,开发者可以以更高的抽象层次来设计数据模型
一个很牛的client-views/mapping引擎,用来映射(map to and form)存储结构(store schemas )
完全支持使用entity sql跟linq( 这东西现在出现频率还挺高的哦,也挺好玩的一个东东)查询edm schemas
.....
linq(august ctp):

linq to entities: 使用linq查询edm schemas
linq to dataset: 对一个或者多个datatable进行linq查询
都是很期待的技术,enjoy it!:)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表