- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个绑定(bind)到 SqlDataSource 的 GridView。我在执行 UpdateCommand 时遇到问题,它似乎执行了两次。当我单步执行 gvChecklist_RowUpdating 事件中的代码时,我看到一切正常运行并且存储过程被执行。我已验证存储过程正常工作,因为数据库表中有一条新记录。但是,当此事件退出时,我收到以下错误:
Procedure or function usp_TestLogInsert has too many arguments specified.
我看到在 RowUpdating 事件之后调用了数据源上的 Updating 事件。我试图取消此事件以防止多次更新尝试,但是没有任何反应并且 GridView 保持在编辑模式。
ASP代码
<asp:UpdatePanel ID="upGridView" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="gvChecklist" runat="server"
AutoGenerateColumns="false" DataSourceID="dsChecklist"
AutoGenerateEditButton="true"
onrowupdating="gvChecklist_RowUpdating">
<Columns>
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:Label ID="lblStatus" runat="server"
Text='<%#Eval("Status") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddStatus" runat="server"
DataTextField="Status"
DataValueField="ID"
DataSourceID="dsStatus" />
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Division"
HeaderText="Division"
readonly="true" />
<asp:BoundField DataField="Application"
HeaderText="Application"
readonly="true" />
<asp:BoundField DataField="Task"
HeaderText="Task"
readonly="true" />
<asp:BoundField DataField="TestedBy"
HeaderText="Tested By"
readonly="true"/>
<asp:BoundField DataField="Notes"
HeaderText="Notes"
ReadOnly="false"/>
<asp:BoundField DataField="JiraTicket"
HeaderText="JIRA Ticket"
readonly="false" />
<asp:BoundField DataField="ID" />
</Columns>
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="gvChecklist" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>
</table>
<asp:SqlDataSource ID="dsChecklist"
SelectCommand=" SELECT l.ID, d.division, c.Context AS Application, t.Task, l.TestedBy, l.Notes, l.JiraTicket, s.Status
FROM Automation.manual.Tests t
OUTER APPLY
(SELECT TOP 1 *
FROM Automation.manual.TestLog l
WHERE l.TestID = t.ID
ORDER BY l.Date DESC) l
INNER JOIN Automation.dbo.Context c ON c.ID = t.Context
INNER JOIN Automation.dbo.Division d ON d.ID = t.Division
LEFT OUTER JOIN Automation.manual.Status s ON s.ID = l.Status"
runat="server"
ConnectionString="<%$ ConnectionStrings:AutomationDBConnectionString %>"
onupdating="dsChecklist_Updating" >
<UpdateParameters>
<asp:Parameter Name="Status" DbType="Int32" />
<asp:Parameter Name="TestID" DbType="Int32" />
<asp:Parameter Name="TestedBy" DbType="String" />
<asp:Parameter Name="Notes" DbType="String" />
<asp:Parameter Name="JiraTicket" DbType="String" />
<asp:Parameter Name="Build" DbType="String" />
</UpdateParameters>
</asp:SqlDataSource>
C#
protected void gvChecklist_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
SQLConnections sql = new SQLConnections();
SqlDataSource dsChecklist = (SqlDataSource)LoginView1.FindControl("dsChecklist");
var dd = (DropDownList)gvChecklist.Rows[e.RowIndex].FindControl("ddStatus");
var status = dd.SelectedValue;
var testID = sql.SQLSelectSingle(String.Format("SELECT ID FROM Automation.manual.Tests WHERE Task = '{0}'", (String)e.OldValues["Task"]), "pwautosql01");
string user = Page.User.Identity.Name;
string notes = (String)e.NewValues["Notes"];
string jira = (String)e.NewValues["JiraTicket"];
var dbID = e.NewValues["ID"];
string build = "TODO";
if (dbID == null) //Record does not exist in TestLog, INSERT a new one
{
dsChecklist.UpdateCommand = "[Automation].[manual].[usp_TestLogInsert]";
dsChecklist.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;
dsChecklist.UpdateParameters["Status"].DefaultValue = status;
dsChecklist.UpdateParameters["TestID"].DefaultValue = testID;
dsChecklist.UpdateParameters["TestedBy"].DefaultValue = user;
dsChecklist.UpdateParameters["Notes"].DefaultValue = notes;
dsChecklist.UpdateParameters["JiraTicket"].DefaultValue = jira;
dsChecklist.UpdateParameters["Build"].DefaultValue = build;
gvChecklist.DataBind();
}
//else //Record already exists in TestLog. UPDATE
//{
//TODO
//}
}
编辑:我使用 SQL Profiler 查看存储过程中发送的参数。即使发生 INSERT 并创建新记录,也会发送一个名为 ID 的额外参数。我从未明确发送此参数,但它似乎是创建的,因为我的 GridView 中有一个名为 ID 的 BoundField。以原始问题为基础,有没有办法让 UpdateCommand 忽略此 BoundField,使其不会自动将其用作参数?
最佳答案
使用 SQL Profiler 后,我看到 BoundField ID 被隐式添加为 UpdateCommand 参数。将此字段更改为 TemplateItem 可修复此问题。
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="tbId" Text='<%#Eval("ID") %>' ReadOnly="true" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
关于c# - SqlDataSource UpdateCommand 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17491739/
我有一个 FormView,下面有一个 UpdateButton 和一个 SqlDataSource。我的 updatebutton 总是用相同的值(我的 gridview 第一行的值)更新 Sil
我想有条件地调用 sqldatasource 上的更新语句。我有一个分配给它的 gridview 和 sqldatasource。我处理 gridview_updating 事件。如果我不为其分配 s
我有一个绑定(bind)到 SqlDataSource 的 GridView。我在执行 UpdateCommand 时遇到问题,它似乎执行了两次。当我单步执行 gvChecklist_RowUpdat
我正在使用临时表在 datagridview 中显示数据。当编辑 datagridview 中的数据时,我试图更新临时表。这是我用来执行此操作的 dataGridView1_RowValidated
我只是想用 EF 4.0 实现一些数据库内容。我尝试强制执行 OptimisticConcurrencyException,但它似乎不起作用。我假设如果数据库中的数据在我调用 context.Save
(C# asp.net 3.5) 我已经在 RowDataBound 事件中成功预填充了 CheckBoxList3。在编辑模式下,用户可以进行其他 checkbox 选择。我已成功捕获新值,创建一个
上周我完成了这个工作。至少,我以为我做到了! DataGridView Update 然后我今天又开始做这个项目,我得到了 Update requires a valid UpdateCommand
" SelectCommand= "SELECT id, regGroupID, amountReceived, other FROM table" UpdateCommand="UP
我在 Visual Basic Express Edition (winforms) 中设置了一个简单的 mdb 数据库,我正在尝试将数据从 datagridview 更新到数据库。我已经将文本框数据
我是 c# 新手,尝试将 datagridview 绑定(bind)到 visual studio 2010 中的 mssql 数据库。数据绑定(bind)正常,一切似乎都正常。除了一些奇怪的错误:
这是代码,我为什么会收到这个错误有什么想法吗? private SQLiteDataAdapter DA_Webfiles; // Setup connection, fill dataset etc
我想通过在 VB.net 中使用 DataGridView 更新/编辑数据库(MS Access)中的数据 我使用了这个代码: Dim sadapter As OleDb.OleDbDa
我又检查了一遍错误,发现报错是因为access数据库中的decimal列。它与舍入数字以及将这些数字与我从表中获取的第一个数据进行比较有关。 最佳答案 解决方案是使用:
我的 DataGrid 的编辑命令有问题。 这是我的数据网格: http://imgur.com/0nmDJX0 现在我想编辑我的标题: http://imgur.com/VU20GNa 如何获取“a
对不起。如果我没有想法,我不会发布这个。我已经尝试了论坛中的所有方法,但无济于事。 所以我有 2 张 table 。一开始都是空的。第一个表有点像客户主列表,用户可以在其中创建新的客户资料。这是代码:
我正在使用分页在 datagridview 中显示数据,但是当我尝试使用 updatebutton 更新任何数据时,数据应该在 datagridview 中更新以及在数据库中。 但是我得到这个错误:
我使用 C# 和 Devart.Data.MySql 来更新数据库表中的行。但我有异常(exception) Concurrency violation: the UpdateCommand affe
如何从 Datagridview c# 更新数据库?我的项目是在数据库中加载数据表。但无法更新到数据库中 加载数据按钮 private void button2_Click(object sender
我是一名优秀的程序员,十分优秀!