访问 TableAdapter 中的 CommandTimeout 属性






4.76/5 (10投票s)
描述了向 TableAdapter 添加公共属性以访问私有 DataAdapter 的 CommandTimeout。
引言
每个Command
对象都有一个public
的CommandTimeout
属性。DataAdapter
最多有四个public
引用指向Command
对象。Visual Studio 2005引入了TableAdapter
的概念,它封装了一个DataAdapter
。封装的DataAdapter
是private
的,并且无法公开访问它及其内容。
因此,你无法访问TableAdapter
使用的Command
对象(这样做是正确的)。但这也就无法访问CommandTimeout
属性了!
定义TableAdapter
的代码是自动生成的(在C#中,文件名为xxxDataSet.Designer.cs)。修改此文件不是解决方案,因为任何对该文件的更改将在下次代码生成时丢失。
解决方案
.NET V2.0(或者只是C#?)还引入了“partial
类”。TableAdapter
类是一个partial
类(并且你拥有它的源代码),因此你可以向它添加任何额外的功能。只需创建(并在你的项目中包含)一个包含你想要添加到类中的任何代码的文件即可。
以下代码添加了Command
对象的CommandTimeout
的public
属性。(在你的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日:初始发布