【问题标题】:Selecting one row when working with typed datasets使用类型化数据集时选择一行
【发布时间】:2010-06-13 13:00:59
【问题描述】:

我的项目中有一个类型化的数据集。我想用只有一行而不是所有行来填充数据表。所选行必须基于主键列。我知道我可以修改设计器代码以实现此功能,但是如果我更改设计器中的代码,我可能会在将来通过设计器更新我的数据时删除此代码。

所以我想改变 SelectCommand 不是在设计器中,而是在启动 MyTypedTableAdapter.Fill 方法之前。奇怪的是设计师没有创建SelectCommand!它创建所有其他命令,但不是这个。如果它会创建SelectCommand,我可以这样改变它:

this.operatorzyTableAdapter.Adapter.SelectCommand.CommandText += " WHERE MyColumn = 1";

它远非完美,但至少我不必修改设计师的作品。不幸的是,正如我之前所说,SelectCommand 没有创建。相反,设计师创造了这样的东西:

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
private void InitCommandCollection() {
    this._commandCollection = new global::System.Data.SqlClient.SqlCommand[1];
    this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
    this._commandCollection[0].Connection = this.Connection;
    this._commandCollection[0].CommandText = "SELECT Ope_OpeID, Ope_Kod, Ope_Haslo, Ope_Imie, Ope_Nazwisko FROM dbo.Operatorzy";
    this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
}

在我看来这没有意义。为什么创建UpdateCommandInsertCommandDeleteCommand而不创建SelectCommand?我可以忍受,但this._commandCollection 是私有的,所以我不能在类代码之外访问它。

如果不更改设计器的代码,我不知道如何进入这个集合。我的想法是通过部分类定义公开集合。但是我想介绍许多类型化的数据集,我真的不想为每个数据集创建部分类定义。

请注意,我使用的是 .NET 3.5。

我发现 this 文章关于访问私有属性,但它涉及 .NET 4.0

感谢您的宝贵时间。

【问题讨论】:

    标签: c# winforms .net-3.5 dataset typed


    【解决方案1】:

    在数据集设计器中,首先使用基本(所有行)查询配置表/适配器对。确保它正常工作并更新/删除等。

    然后右键单击“添加查询”并更改 SQL 文本以包含“WHERE MyId = @Id”。确保保留相同的列。选择 Next 并调用生成的方法“FillById()”。

    当然,在正确的地方使用 FillById(id) 而不是 Fill()。

    【讨论】:

    • 谢谢亨克。这会起作用,但我必须对每个数据集都这样做。您能否再告诉我一件事:有没有办法在一段时间后自动更新数据集(表结构更改)。如果是这样,该怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多