【问题标题】:TableAdapter - updating without a keyTableAdapter - 无密钥更新
【发布时间】:2009-02-27 01:03:06
【问题描述】:

我是 .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 自动生成的。

感谢您最出色的建议。

【问题讨论】:

    标签: c# .net tableadapter


    【解决方案1】:

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

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

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

    相反,双击带有适配器名称的标题。设计者将创建(如有必要)随附的非设计者源文件并将部分类的外部放入其中。不幸的是,这就是设计器在 C# 中的代码生成有多远,你必须从那里开始。 (旁白:VB 设计者知道更多技巧)。

    编辑:

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

      var updateCommand = new SqlCommand();
      ...
    

    【讨论】:

    • 它也没有在复合键上生成 UPDATE 语句 - 这是预期的吗?我将数据类型从 nvarchar 更改为 varchar 并减少了总字节数。
    • 我不确定复合键,但 varchar/nvarchar 和长度应该无关紧要。
    猜你喜欢
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2015-05-20
    • 2014-10-31
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    相关资源
    最近更新 更多