如何从 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 中的文本文件?