C# TableAdapter-无键更新

C# TableAdapter-无键更新,c#,.net,tableadapter,C#,.net,Tableadapter,我是.NETC#业务的新手,上周我就开始创建表单应用程序,以便为SSIS配置洗牌数据。微软的天才们决定不对我正在使用的表应用一个键,而生成两个候选字段的复合键将不起作用,因为它们的组合长度太长。我特别不想通过添加自动增量字段来搞乱[ssis配置]表模式 因此,我在从DataGridView控件获取更新以使用TableAdapter时遇到了很多麻烦 我需要update语句是update table set a=x,其中b=y和c=z 我可以设置TableAdapter的更新方法吗?如果可以,如何设

我是.NETC#业务的新手,上周我就开始创建表单应用程序,以便为SSIS配置洗牌数据。微软的天才们决定不对我正在使用的表应用一个键,而生成两个候选字段的复合键将不起作用,因为它们的组合长度太长。我特别不想通过添加自动增量字段来搞乱[ssis配置]表模式

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

我需要update语句是update table set 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自动生成的


非常感谢您的建议。

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

没有主键是设计器不会生成Insert、Update或Delete命令的众多原因之一。这是CommandBuilder的一个限制

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

相反,双击带有Adaptername的标题。设计器将创建(如果需要)附带的非设计器源文件,并将分部类的外部放在其中。不幸的是,在C#中,设计器的代码生成要走多远,您必须从这里开始。(旁白:VB设计师还知道一些技巧)

编辑:

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

  var updateCommand = new SqlCommand();
  ...

它也没有在复合键上生成UPDATE语句-这是预期的吗?我将数据类型从nvarchar更改为varchar,并减少了总字节数。我不确定复合键,但varchar/nvarchar和长度应该无关紧要。