为什么 - '生成插入更新和选择语句'变灰了?

时间:2009-02-23 03:22:03

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

为什么在“配置数据源”时的ADVANCE部分中,“GENERATE INSERT UPDATE AND SELECT STATEMENT”是否为灰色?在某些表格上,它不是灰色的,工作正常。

我知道可以通过在属性中将autogenerateeditbutton标记更改为true来实现此方法,并且可以通过这种方式进行编辑 - 但是当这样做时,您尝试时不会更新数据库。

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

浏览器中的错误如下:

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

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

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:1)

看到tvanfosson的答案是主键,这是一种可能性。如果select语句使用视图而不是直接表,则也会出现此行为。

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

答案 2 :(得分:1)

使用以下视图制作数据源: 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>