65.9K
CodeProject 正在变化。 阅读更多。
Home

访问 TableAdapter 中的 CommandTimeout 属性

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (10投票s)

2006年2月9日

CPOL

1分钟阅读

viewsIcon

154522

描述了向 TableAdapter 添加公共属性以访问私有 DataAdapter 的 CommandTimeout。

引言

每个Command对象都有一个publicCommandTimeout属性。DataAdapter最多有四个public引用指向Command对象。Visual Studio 2005引入了TableAdapter的概念,它封装了一个DataAdapter。封装的DataAdapterprivate的,并且无法公开访问它及其内容。

因此,你无法访问TableAdapter使用的Command对象(这样做是正确的)。但这也就无法访问CommandTimeout属性了!

定义TableAdapter的代码是自动生成的(在C#中,文件名为xxxDataSet.Designer.cs)。修改此文件不是解决方案,因为任何对该文件的更改将在下次代码生成时丢失。

解决方案

.NET V2.0(或者只是C#?)还引入了“partial类”。TableAdapter类是一个partial类(并且你拥有它的源代码),因此你可以向它添加任何额外的功能。只需创建(并在你的项目中包含)一个包含你想要添加到类中的任何代码的文件即可。

以下代码添加了Command对象的CommandTimeoutpublic属性。(在你的xxxDataSet.Designer.cs文件中查找你的TableAdapter的类名和命名空间。)

namespace xxx.xxxDataSetTableAdapters
{
    public partial class xxxTableAdapter
    {
        public int InsertCommandTimeout
        {
            get
            {
                return ( this._adapter.InsertCommand.CommandTimeout ) ;
            }

            set
            {
                this._adapter.InsertCommand.CommandTimeout = value ;
            }
        }

        public int UpdateCommandTimeout
        {
            get
            {
                return ( this._adapter.UpdateCommand.CommandTimeout ) ;
            }

            set
            {
                this._adapter.UpdateCommand.CommandTimeout = value ;
            }
        }

        public int DeleteCommandTimeout
        {
            get
            {
                return ( this._adapter.DeleteCommand.CommandTimeout ) ;
            }

            set
            {
                this._adapter.DeleteCommand.CommandTimeout = value ;
            }
        }

        public int SelectCommandTimeout
        {
            get
            {
                return ( this._commandCollection[0].CommandTimeout ) ;
            }

            set
            {
                for ( int i = 0 ; i < this._commandCollection.Length ; i++ )
                {
                    if ( ( this._commandCollection [ i ] != null ) )
                    {
                        ((System.Data.SqlClient.SqlCommand) 
                         (this._commandCollection [ i ])).CommandTimeout = value;
                    }
                }
            }
        }
    }
}

然后你可以像这样访问它们

this.xxxTableAdapter.SelectCommandTimeout = 0 ;
// Set the CommandTimeout
// for the TableAdapter's Select command(s)

总结

你可以使用这种技术向生成的partial类添加任何你想要的内容,但要小心你所做的事情!

历史

  • 2006年2月8日:初始发布
© . All rights reserved.