代码之家  ›  专栏  ›  技术社区  ›  Wodzu

使用类型化数据集时选择一行

  •  0
  • Wodzu  · 技术社区  · 16 年前

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

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

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

    选择命令 未创建。相反,designer创建了如下内容:

    [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;
    }
    

    在我看来这毫无意义。为什么要创造 UpdateCommand InsertCommand DeleteCommand 但不要创造 选择命令 this._commandCollection 是私有的,所以我不能在类代码之外访问它。

    我不知道如何进入这个集合而不改变设计师的代码。我的想法是通过部分类定义公开集合。然而,我想介绍许多类型化数据集,我真的不想为它们中的每一个创建部分类定义。

    请注意,我使用的是.NET3.5。

    我找到了 this 关于访问私有属性的文章,但涉及.NET4.0

    1 回复  |  直到 16 年前
        1
  •  1
  •   Henk Holterman    16 年前

    然后右键单击“addquery”,并将SQL文本更改为包含“WHERE MyId=@Id”。确保保持相同的列。选择Next并调用生成的方法“FillById()”。

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