我是.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自动生成的。
感谢您提出的最佳建议。
答案 0 :(得分:2)
从您的代码中我假设您正在使用带有设计器的类型化数据集。
没有主键是设计人员不会生成插入,更新或删除命令的众多原因之一。这是CommandBuilder的限制。
您可以使用属性窗口向Apdapter添加更新命令,但我建议不要这样做,如果您稍后再次配置主查询,它将很乐意丢弃您的所有工作。同样的论点反对修改任何* .Designer.cs文件中的代码。
相反,请使用Adaptername双击标题。设计人员将创建(如果需要)随附的非设计器源文件,并将部分类的外部放入其中。不幸的是,设计师的代码生成在C#中走了多远,你必须从那里开始。 (旁白:VB设计师知道更多技巧)。
编辑:
您必须提供自己的Update(...)方法并设置UpdateCommand等。
var updateCommand = new SqlCommand();
...