【问题标题】:How do I update an an Access database from a GridView in Visual Studio?如何从 Visual Studio 中的 GridView 更新 Access 数据库?
【发布时间】:2015-06-25 08:10:19
【问题描述】:

我在 Visual Studio 2010 中使用网格视图时尝试更新访问数据库,但没有成功。让我试着解释一下我有什么。

我有一个访问数据库,其中包含一个表“tblConfirmedworkhours”,其中包含“dateworked”和“confirmed”字段。我可以使用编辑/更新链接在我的网页上显示过滤后的表格,但表格不会更新。

选项1:我希望(如果可能的话)不必点击编辑和更新按钮,只需编辑屏幕上的数据(我在想某种类似于连续表格的东西是MS访问,然后点击某种保存按钮(如果可能,该按钮将运行已创建并存储在我的访问数据库“qryToHistory”中的附加查询。

选项 2:能够使用编辑/更新按钮来更改表中的数据。

这是我当前的代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
DataSourceID="AccessDataSource1"  Width="983px" 
    AutoGenerateDeleteButton="True" AutoGenerateEditButton="True">
<Columns>
   <asp:BoundField DataField="WorkHourID" Visible="false" 
        HeaderText="Timesheet ID" />
    <asp:BoundField DataField="EmpName" HeaderText="Employee" 
        SortExpression="EmpName" />
    <asp:BoundField DataField="dateworked" 
        HeaderText="Date" SortExpression="dateworked" ApplyFormatInEditMode="True">
    <ItemStyle HorizontalAlign="Center" />
    </asp:BoundField>
    <asp:CheckBoxField DataField="confirmed" HeaderText="Confirmed" 
        SortExpression="confirmed" Text="This is OK">
    <ItemStyle HorizontalAlign="Center" />
    </asp:CheckBoxField>
</Columns>
<EditRowStyle Width="500px" Wrap="True" />
<EmptyDataRowStyle Width="5000px" />
</asp:GridView>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
DataFile="~/PayrollDirect.accdb" 
SelectCommand="SELECT [WorkHourID], [EmpName], [dateworked], [confirmed] FROM [tblConfirmedworkhours] WHERE (([CompanyID] = ?) AND ([confirmed] = ?)) ORDER BY [dateworked]"
UpdateCommand="UPDATE tblConfirmedworkhours SET dateworked=dateworked, confirmed=confirmed where WorkHourID=WorkHourID">
<SelectParameters>
    <asp:SessionParameter DefaultValue="0" Name="CompanyID" SessionField="UserID" Type="Int32" />
    <asp:Parameter DefaultValue="false" Name="confirmed" Type="Boolean" />
</SelectParameters>
<UpdateParameters>
    <asp:Parameter Name="dateworked"/>
    <asp:Parameter Name="confirmed"/>
</UpdateParameters>
</asp:AccessDataSource>

选项 1 是否可行,如果可以,如何。

如果选项 1 不可行,我该如何对选项 2 中更新表的问题进行排序。

我仍在学习 Visual Studio,因此非常感谢任何和所有帮助。

【问题讨论】:

    标签: c# asp.net ms-access gridview accessdatasource


    【解决方案1】:

    我在您的数据源中没有看到更新命令。您是尝试通过 aspx 页面更新它,还是有代码隐藏页面?

    尝试在 asp:accessDataSource 中添加一个 UpdateCommand。我怀疑目前,您正在要求表格更新,而您还没有告诉它 a) 允许 和 b) 应该如何更新

    编辑后。

    这是我的想法。但是尝试添加类似以下的内容。(类似于选择)

      UpdateCommand="UPDATE tblConfirmedworkhours  SET dateWorked=@dateWorked, confirmed =@confirmed where EmpName=@empName">
      <UpdateParameters>
        <asp:Parameter Name="dateWorked" />
        <asp:Parameter Name="confirmed" />
      </UpdateParameters>
    

    我在这台电脑上没有 VS,所以我目前无法给出确切的答案,抱歉。但是,我认为您可能还需要在查询中包含员工编号,因为您可能有 2 名同名员工,您需要一个唯一的参考来区分他们。

    【讨论】:

    • 没有后面的代码。如何以及在何处添加更新命令。我已经尝试了一些东西,但似乎没有任何效果。
    • 谢谢。我已经用你的建议更新了我的代码。我收到一个错误:标准表达式中的数据类型不匹配。该字段是一个布尔值(不确定这是否会有所不同),但我已经尝试了表中的其他字段,并且返回结果相同。有什么想法吗?
    • 在更新时,您不应该设置 ID,一旦创建记录,它应该保持静态,但是,那是偶然的。您的更新命令(如上)似乎在 2 个参数之间缺少逗号(dateworked=@dateworked confirm=@confirmed)它抱怨哪个字段?您可以按原样复制更新查询,并直接在访问中运行吗? (您必须将 @parameters 更改为实际值。
    • 好的。一直试图让这项工作尝试很多不同的事情。我一定已经把逗号放进去了,只是没有复制新文本。抱歉。更新查询在 ms 访问中完美运行。如果我取出“已确认”字段,那么它不会抛出错误,但它也不会更新表。放回去,我得到相同的数据类型不匹配错误。我已经使用所有当前更改更新了我的代码。
    • 能否在更新参数上添加类型属性?即 Type="Boolean" 或 Type="Int32"
    【解决方案2】:

    我也遇到了很多麻烦,并发现了这些帖子中没有出现的内容:对我来说,主要原因是我有一个 lastupdated 日期时间列,这是必需的,并且设置了默认值在数据库中。我假设数据库会为我处理它的更新,所以我将它作为 GridView 中的隐藏列。

    在经历了数小时的挫折之后,我重新开始并测试了我的每一步。然后我发现隐藏必填字段就是导致这个问题的全部原因!您可能还会注意到日期格式可能已关闭,具体取决于您的设置,因此如果需要,您还需要以正确的格式提供它。

    顺便说一句,它不是唯一的 Access 东西;即使使用 MS SQL 服务器也会发生这种情况,我想其他数据库也会发生这种情况。

    我想这也是有关此报告的几个问题“有时有效,有时无效”或“它适用于一个表而不适用于另一个”的原因。

    如果您不希望用户更改某些列的值,请将它们设置为模板并将其编辑/添加属性更改为只读。

    还有其他方法可以处理这个问题,例如,在隐藏时在代码后面提供它的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多