4

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

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

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

浏览器中的错误如下:

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

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

主键如何分配到表中。这应该在 Access 中完成吗?它可以在VS08中完成吗?如何?

4

3 回答 3

9

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

于 2009-02-23T03:42:56.267 回答
1

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

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

于 2009-02-23T04:42:10.510 回答
1

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

" DeleteCommand="删除 [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>
于 2011-02-22T10:31:56.530 回答