【问题标题】:WHY is - 'GENERATE INSERT UPDATE AND SELECT STATEMENT' greyed out?为什么 - “生成插入更新和选择语句”是灰色的?
【发布时间】:2009-02-23 03:22:02
【问题描述】:

为什么在“配置数据源”时的“高级”部分中的“生成插入更新和选择语句”显示为灰色?在某些桌子上,它没有变灰并且工作正常。

我知道可以通过在属性中将 autogenerateeditbutton 标记更改为 true 来解决此问题,并且您可以通过这种方式进行编辑 - 但完成此操作后,您尝试时不会更新数据库。

当我查看有关此问题的论坛时,还提到这可能与设置主键有关。虽然我无法得到一个确凿的答案。

浏览器报错如下:

NotSupportedException: Updating is not supported by data source 'AccessDataSource1' unless UpdateCommand is specified.

任何想法如何用这些有问题的表更新数据库?为什么会有问题?

主键是如何分配给表的。这应该在 Access 中完成吗? VS08能做到吗?怎么做?

【问题讨论】:

  • 您没有使用 Access - 您只是在使用 Jet。

标签: sql visual-studio-2008 ms-access databound-controls


【解决方案1】:

为了自动生成插入/选择/更新语句,表必须有一个主键,以便在插入或更新时选择正确行的代码知道要选择哪一行。如果表中没有具有唯一值的列,则可能有不止一行与应更新的行匹配。使用主键可以让设计人员生成可靠地选择要更新的正确行的代码。

【讨论】:

  • 主键是如何分配给表的。这应该在 Access 中完成吗?可以在VS08中实现吗?如何实现?
  • 在 Jet MDB 中的表中添加主键不必具有 Access 权限——您只需要知道正确的 DDL 并拥有 ODBC 或 OLEDB 驱动程序。
【解决方案2】:

查看 tvanfosson 对主键的回答,这是一种可能性。如果您的 select 语句使用视图而不是直接表,您也会得到这种行为。

您可以通过在 .xsd 文件中生成或手动编码 xml 来解决此问题,但这是一个相当硬核的解决方案;-)

【讨论】:

  • 这个之前被我抓住了,数据库中不存在但在 VS 中创建的视图不能有原始更新例程。不过,您可以手动添加任何查询,而且通常您不想要所有四个本地查询。
  • “观看次数?” Jet MDB 中没有这样的东西。
  • @[David W. Fenton]:我写这个答案时没有 ms-access 标签,也没有提到 Access。
【解决方案3】:

使用如下视图创建数据源: mainkey 是一个主键。 对此类用户的视图插入、更新、选择、删除权限:

" DeleteCommand="DELETE FROM [VW_Security_UK_UserAccess] WHERE [MainKey] = @MainKey"

                InsertCommand="INSERT INTO [VW_Security_UK_UserAccess] ([UserName], [HasAccess], [ApplicationDefinitionmainkey], [SortOrder]) VALUES (@UserName, @HasAccess, @ApplicationDefinitionmainkey, @SortOrder)" 
                SelectCommand="SELECT [MainKey], [UserName], [HasAccess], [ApplicationDefinitionmainkey], [SortOrder] FROM [VW_Security_UK_UserAccess]" 
                UpdateCommand="UPDATE [VW_Security_UK_UserAccess] SET [UserName] = @UserName, [HasAccess] = @HasAccess, [ApplicationDefinitionmainkey] = @ApplicationDefinitionmainkey, [SortOrder] = @SortOrder WHERE [MainKey] = @MainKey">
                <DeleteParameters>
                    <asp:Parameter Name="MainKey" Type="Int16" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="UserName" Type="String" />
                    <asp:Parameter Name="HasAccess" Type="String" />
                    <asp:Parameter Name="ApplicationDefinitionmainkey" Type="Byte" />
                    <asp:Parameter Name="SortOrder" Type="Int32" />
                </InsertParameters>
                <UpdateParameters>
                    <asp:Parameter Name="UserName" Type="String" />
                    <asp:Parameter Name="HasAccess" Type="String" />
                    <asp:Parameter Name="ApplicationDefinitionmainkey" Type="Byte" />
                    <asp:Parameter Name="SortOrder" Type="Int32" />
                    <asp:Parameter Name="MainKey" Type="Int16" />
                </UpdateParameters>
            </asp:SqlDataSource>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多