我的UPDATE命令无法更改表中的任何日期,而非常相似的SELECT和DELETE命令有效。当我将UpdateParameters更改为无效选项时,后面的代码命令会抛出错误,但是当参数正确时,没有任何内容。
激活DELETE(可行)的代码
protected void Button2_Click(object sender, EventArgs e)
{
this.AccessDataSource6.Delete();
}
隐藏代码以激活UPDATE(这似乎对数据有任何影响)
protected void Button1_Click(object sender, EventArgs e)
{
this.AccessDataSource6.Update();
}
AccessDatasource,其SQL命令和参数
<asp:AccessDataSource ID="AccessDataSource6" runat="server" DataFile="~/App_Data/ASPNetDB.mdb"
SelectCommand="SELECT [PracticeDate],
[StartTime],
[EndTime],
[Division],
[TeamStr],
[FieldName]
FROM [vw_fbScheduleFull]
WHERE (([LocationID] = ?)
AND ([DayName] = ?)
AND ([PracticeDate] >= ?)
AND ([PracticeDate] <= ?)
AND ([StartTime] = ?))
ORDER BY [PracticeDate], [FieldName]"
UpdateCommand="UPDATE fbPracticeSlot
SET StartTime = ?, EndTime = ?
WHERE ID IN (
SELECT [PracticeSlotID]
FROM [vw_fbScheduleFull]
WHERE (([LocationID] = ?)
AND ([DayName] = ?)
AND ([PracticeDate] >= ?)
AND ([PracticeDate] <= ?)
AND ([StartTime] = ?))
)"
DeleteCommand="DELETE FROM fbPracticeSlot
WHERE ID IN (
SELECT [PracticeSlotID]
FROM [vw_fbScheduleFull]
WHERE (([LocationID] = ?)
AND ([DayName] = ?)
AND ([PracticeDate] >= ?)
AND ([PracticeDate] <= ?)
AND ([StartTime] = ?))
)">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownListLocation" Name="LocationID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="DropDownListDOW" Name="DayName" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="DropDownListStartDate" Name="PracticeDate" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="DropDownListEndDate" Name="PracticeDate2" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="DropDownListStartTime" Name="StartTime" PropertyName="SelectedValue" Type="DateTime" />
</SelectParameters>
<UpdateParameters>
<asp:ControlParameter ControlID="DropDownListNewStart" Name="NewStartTime" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="DropDownListNewEnd" Name="NewEndTime" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="DropDownListLocation" Name="LocationID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="DropDownListDOW" Name="DayName" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="DropDownListStartDate" Name="PracticeDate" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="DropDownListEndDate" Name="PracticeDate2" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="DropDownListStartTime" Name="StartTime" PropertyName="SelectedValue" Type="DateTime" />
</UpdateParameters>
<DeleteParameters>
<asp:ControlParameter ControlID="DropDownListLocation" Name="LocationID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="DropDownListDOW" Name="DayName" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="DropDownListStartDate" Name="PracticeDate" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="DropDownListEndDate" Name="PracticeDate2" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="DropDownListStartTime" Name="StartTime" PropertyName="SelectedValue" Type="DateTime" />
</DeleteParameters>
</asp:AccessDataSource>
请帮助我理解为什么更新不会更改数据。
似乎我需要使用硬编码参数编写UpdateCommands以更改值,或者为我要执行的每个更新编写DeleteCommand和InsertCommand。请帮助我找到一些方法来避免这种污染。
答案 0 :(得分:1)
通常,有效的SQL Update语句会在没有错误的情况下失败,因为没有记录符合您的WHERE条件。您是否在Button_Click事件上设置了断点并查看了参数的值?
答案 1 :(得分:0)
尝试并捕获Updating
事件,以查看运行AccessDataSource6.Update();
在事件中,您可以通过查看来获取基础SQL
SQLDataSourceCommandEventArgs
的Command
属性的实例。
这应该是起点 如果SQL看起来没问题,请尝试在MDB上运行它,看看它是否会引发任何错误。
答案 2 :(得分:0)
这可能不是答案,我不像这样使用数据adpaters,但我在过去已经注意到,传递给查询的参数的顺序对于访问数据库很重要。
您的更新参数列表与更新查询中的参数顺序不匹配 - 这可能只是您的问题(假设您已完成上述操作并检查是否存在与您的where子句匹配的内容)。
答案 3 :(得分:0)
首先,在更新数据库之后,你会怎么做?我遇到了一个问题,访问数据库在你的项目中,你自动设置为始终复制到输出目录。如果您运行代码然后重新启动它,访问数据库就会被吹走。只是一个想法,但一个是确保你没有做。
答案 4 :(得分:0)
通过阅读你的问题和所有后续行动,我可以看到你已经涵盖了所有的基础。我确实有一个想法,它真的是在黑暗中拍摄。也许Access解析器无法将目标列识别为属于您正在更新的表。你试过了吗?
UpdateCommand="UPDATE fbPracticeSlot
SET fbPracticeSlot.StartTime = ?, fbPracticeSlot.EndTime = ?
WHERE ID IN (
SELECT [PracticeSlotID]
FROM [vw_fbScheduleFull]
WHERE (([LocationID] = ?)
AND ([DayName] = ?)
AND ([PracticeDate] >= ?)
AND ([PracticeDate] <= ?)
AND ([StartTime] = ?))
)"
由于Access支持多表更新,因此在嵌套选择内部存在名为StartTime的列时,解析器可能会混淆。
无论如何,似乎你已经尝试了其他一切。祝你好运!
答案 5 :(得分:-1)
我可能会因为这个无用的答案而被投票,但我不禁注意到你正在使用符号的xml常量&gt;和&lt;在您的UPDATE子句中....在UpdateCommand上写一个响应来验证sql是否有效,复制该SQL并将其粘贴到Access中,看看它是否被Access本身接受?对不起,如果这听起来蹩脚而愚蠢*sniff*
希望这有帮助, 最好的祝福, 汤姆。