如何从 Visual Studio 中的 GridView 更新 Access 数据库?

Posted

技术标签:

【中文标题】如何从 Visual Studio 中的 GridView 更新 Access 数据库?【英文标题】:How do I update an an Access database from a GridView in Visual Studio? 【发布时间】: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,因此非常感谢任何和所有帮助。

【问题讨论】:

【参考方案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 服务器也会发生这种情况,我想其他数据库也会发生这种情况。

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

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

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

【讨论】:

以上是关于如何从 Visual Studio 中的 GridView 更新 Access 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Visual Studio 获取 SSMS 中的当前用户 ID?

如何从Visual Studio 2017中的组合框中删除TFS存储库帐户

如何通过 Visual Studio 修复功能应用发布中的错误

如何使用“保存到..”对话框将字符串从 EditControl 写入 Visual Studio 2008 中的文本文件?

如何从 Visual Studio 2015 更新 3 中的构建中排除 node_module 文件夹

从 Visual Studio 中的类生成 XSD