2009-02-23 93 views
3

为什么在ADVANCE部分当我'配置数据源'是'GENERATE INSERT UPDATE AND SELECT STATEMENT'灰显?在一些桌子上,它不会变灰,工作正常。原因是 - '生成插入更新和选择语句'灰显?

我知道通过在属性中将autogenerateeditbutton标记更改为true可以实现这一点,您可以使用这种方式进行编辑 - 但是当完成此操作时,尝试时不会更新数据库。

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

在浏览器中的错误如下:

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

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

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

+0

您没有使用访问 - 你只使用Jet。 – 2009-02-24 02:02:45

回答

6

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

+0

主键是如何分配给表的,应该在Access中完成吗?可以在VS08中完成,以及如何? – CGF 2009-02-23 10:30:26

+0

请参阅这篇文章:http://office.microsoft.com /en-us/access/HA100140991033.aspx – tvanfosson 2009-02-23 12:55:57

1

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

就可以解决这个问题的产生或手工编码的.xsd文件的XML,但是这是一个相当铁杆的解决方案;-)

1

让您的数据源,像这样的观点: mainkey是一个主键。在视图 允许插入,更新,选择,删除这样的用户:

“ 的DeleteCommand =” 删除[VW_Security_UK_UserAccess],其中[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>