none
关于设计器生成的TableAdapter的问题 RRS feed

  • 问题

  • 不知道怎么描述我的问题合适。希望大家能看懂。
    1.我的设计器中创建了一个DataSet,
    2.接着又创建了一个TableAdapter,比如,我把它叫做:AdapterOne
    3.接着我在代码中实例化这个AdapterOne,比如:AdapterOne ao=new AdapterOne();
    4.下面就是我的问题。当我执行:ao.Adapter.SelectCommand.CommandText=.....;这样的代码时,
    就告诉我SelectCommand没有实例化。
    因此我就必需先执行ao.Fill()这句,这句代码会让ao实例化SelectCommand这个东西。
    我的问题就是我怎么在不执行Fill方法,并且不接着数据库的前提下实例化SelectCommand,让我能设置ao.Adapter.SelectCommand.CommandText=.....;

    不知道我说的是不是清楚了。
    立青
    2009年8月24日 17:43

答案

  • 呵呵   不用伪代码
    给你一个  Northwind的例子

    建立一个 Dataset 连接到 northwind数据库  选择 Categories表

    得到 
    NorthwindDataSet.xsd   ~~dataset
    Categories ~~dataable
    CategoriesTableAdapter~~ tableadepter

    这时候看NorthwindDataSet.Designer.cs  发现里面的类

    CategoriesTableAdapter : global::System.ComponentModel.Component

    中有成员
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
                get {
                    if ((this._commandCollection == null)) {
                        this.InitCommandCollection();
                    }
                    return this._commandCollection;
                }
            }
    因为不是public的 所以你可以增加一个把它公开出来的方法

    添加  新文件
    CategoriesTableAdapter_Add.cs


    namespace 你的dataset的命名空间.NorthwindDataSetTableAdapters
    {
        public partial class CategoriesTableAdapter
        {
            public  global::System.Data.SqlClient.SqlCommand[] Commands
            {
                get
                {
                    return CommandCollection;
                }
            }
        
        
        }
    }
    
    


    大功告成  编译后就可以访问  NorthwindDataSetTableAdapters.CategoriesTableAdapter.Commands 了
    恭喜自己5星用户达成
    • 已标记为答案 Establown 2009年8月25日 6:18
    2009年8月25日 4:20
  • 写在另一个文件    如果写在designer会被自动覆盖掉

    要求命名空间和类名  和你要扩展的类完全一样    但是继承的类和实现的接口 不需要额外声明
    恭喜自己5星用户达成
    • 已标记为答案 Establown 2009年8月25日 6:19
    2009年8月25日 5:53

全部回复

  • Designer.cs里面有个command集合的,你可以用一个partial class来扩展tableadapter类来更改这个集合里的查询。

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月24日 19:01
    版主
  • Designer.cs里面有个command集合的,你可以用一个partial class来扩展tableadapter类来更改这个集合里的查询。

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP

    首先感谢你的回答。
    你的意思我明白,不过能再具体一点吗?
    我的水平有限,最好是能写一点伪代码。

    多谢了。
    立青
    2009年8月25日 4:06
  • How to: Extend the Functionality of a TableAdapter

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月25日 4:11
    版主
  • 呵呵   不用伪代码
    给你一个  Northwind的例子

    建立一个 Dataset 连接到 northwind数据库  选择 Categories表

    得到 
    NorthwindDataSet.xsd   ~~dataset
    Categories ~~dataable
    CategoriesTableAdapter~~ tableadepter

    这时候看NorthwindDataSet.Designer.cs  发现里面的类

    CategoriesTableAdapter : global::System.ComponentModel.Component

    中有成员
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
                get {
                    if ((this._commandCollection == null)) {
                        this.InitCommandCollection();
                    }
                    return this._commandCollection;
                }
            }
    因为不是public的 所以你可以增加一个把它公开出来的方法

    添加  新文件
    CategoriesTableAdapter_Add.cs


    namespace 你的dataset的命名空间.NorthwindDataSetTableAdapters
    {
        public partial class CategoriesTableAdapter
        {
            public  global::System.Data.SqlClient.SqlCommand[] Commands
            {
                get
                {
                    return CommandCollection;
                }
            }
        
        
        }
    }
    
    


    大功告成  编译后就可以访问  NorthwindDataSetTableAdapters.CategoriesTableAdapter.Commands 了
    恭喜自己5星用户达成
    • 已标记为答案 Establown 2009年8月25日 6:18
    2009年8月25日 4:20
  • How to: Extend the Functionality of a TableAdapter

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP

    这个partial class不明白。不过我不熟悉。
    请问,这个partial class应该另写一个文件,还是写在设计器生成的代码中?
    请问我应该重写什么方法?大概怎么重写?
    立青
    2009年8月25日 4:32
  • 写在另一个文件    如果写在designer会被自动覆盖掉

    要求命名空间和类名  和你要扩展的类完全一样    但是继承的类和实现的接口 不需要额外声明
    恭喜自己5星用户达成
    • 已标记为答案 Establown 2009年8月25日 6:19
    2009年8月25日 5:53
  • 写在另一个文件    如果写在designer会被自动覆盖掉

    要求命名空间和类名  和你要扩展的类完全一样    但是继承的类和实现的接口 不需要额外声明
    恭喜自己5星用户达成

    真是感谢了。搞定了。。。
    立青
    2009年8月25日 6:19