TableAdapter - 没有密钥更新

时间:2009-02-27 01:03:07

标签: c# .net tableadapter

我是.net c#业务的新手,并在上周创建了一个表单应用程序,用于为SSIS配置调整数据。 MS的天才决定不对我正在使用的表格应用密钥 - 并且由于它们的组合长度太长,生成两个候选字段的复合密钥将不起作用。我不想特别想通过添加自动增量字段来混淆[ssis配置]表模式。

所以我在从DataGridView控件获取更新以使用TableAdapter时遇到了很多麻烦。

我需要更新语句为更新表集a = x,其中b = y且c = z。

我可以设置TableAdapter的更新方法,如果是,则如何设置。如果没有,该怎么办?

我看到这个自动生成的代码:

this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
            this._adapter.InsertCommand.Connection = this.Connection;
            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[SSIS Configurations Staging] ([ConfigurationFilter], [Configur" +
                "edValue], [PackagePath], [ConfiguredValueType]) VALUES (@ConfigurationFilter, @C" +
                "onfiguredValue, @PackagePath, @ConfiguredValueType)";

但是在我的表单代码中,UpdateCommand不可用。我假设这是因为上面的代码是一个类定义,我在创建对象后无法更改。我看到这段代码建议不要更改,因为它是由VS自动生成的。

感谢您提出的最佳建议。

1 个答案:

答案 0 :(得分:2)

从您的代码中我假设您正在使用带有设计器的类型化数据集。

没有主键是设计人员不会生成插入,更新或删除命令的众多原因之一。这是CommandBuilder的限制。

您可以使用属性窗口向Apdapter添加更新命令,但我建议不要这样做,如果您稍后再次配置主查询,它将很乐意丢弃您的所有工作。同样的论点反对修改任何* .Designer.cs文件中的代码。

相反,请使用Adaptername双击标题。设计人员将创建(如果需要)随附的非设计器源文件,并将部分类的外部放入其中。不幸的是,设计师的代码生成在C#中走了多远,你必须从那里开始。 (旁白:VB设计师知道更多技巧)。

编辑:

您必须提供自己的Update(...)方法并设置UpdateCommand等。

  var updateCommand = new SqlCommand();
  ...