0

グリッドビューの行を更新しようとしていますが、重複した例外エラーが引き続き発生します。私はc#を使用しています。私は3層アーキテクチャを使用しています。レコードを挿入できますが、レコードを更新できません。助けてくださいありがとう

<asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="True" OnRowEditing="EditRecord" OnRowUpdating="UpdateRecord" DataKeyName = "payClaimId">
<Columns>
<asp:TemplateField HeaderText="Duty ID">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "dutyId")%></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Pay Claim ID">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "payClaimId")%></ItemTemplate>
<EditItemTemplate><asp:TextBox ID="txtpayclaimid" runat="Server" ReadOnly ="true" Text ='<%# Eval("payClaimId") %>'></asp:TextBox></EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date Submitted">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "printeddate", "{0:d}")%></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date Worked">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "dateWorked", "{0:d}")%></ItemTemplate>
<EditItemTemplate><asp:TextBox ID="txtdateworked" runat="Server" Text ='<%# Eval("dateWorked", "{0:d}") %>'></asp:TextBox></EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Total Hours">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "totalHours")%></ItemTemplate>
<EditItemTemplate><asp:TextBox ID="txttotalhours" runat="Server" Text ='<%# Eval("totalHours") %>'></asp:TextBox></EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Status">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "status")%></ItemTemplate>
</asp:TemplateField>

</Columns>
</asp:GridView>
 private void loaddata()
    {
        DataTable dt = new DataTable();
        Timesheet ts = new Timesheet();
        dt = ts.gettimesheetrecords(Convert.ToInt32(txtboxeid.Text));
        GridView3.DataSource = dt;
        GridView3.DataBind();
    }

    protected void EditRecord(object sender, GridViewEditEventArgs e)
    {

        GridView3.EditIndex = e.NewEditIndex;

        loaddata();

    }
    protected void UpdateRecord(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = (GridViewRow)GridView3.Rows[e.RowIndex];
        TextBox pcid = (TextBox)row.FindControl("txtpayclaimid");
        TextBox dworked = (TextBox)row.FindControl("txtdateworked");
        TextBox tHours = (TextBox)row.FindControl("txttotalhours");
        int payClaimId = int.Parse(pcid.Text);
        string dateWorked = Convert.ToString(dworked.Text);
        double totalHours = double.Parse(tHours.Text);
        int res = 0;
        PayClaim pc = new PayClaim();


        try
        {
            res = pc.updatepayclaim(payClaimId, dateWorked, totalHours);
            if (res > 0)
            {
                statuslabel.Text = "Record saved";
                GridView3.EditIndex = -1;

                loaddata();
            }
            else
            {
                statuslabel.Text = "Duplicates";
            }
        }
        catch (Exception ex)
        {
            statuslabel.Text = "Error";
        }
        finally
        {
            pc = null;
        }
    }

私のinsert payclaimメソッド

public int updatepayclaim(int payClaimId, string dateWorked, double totalHours)
    {

        dbCon = new OleDbConnection(sConnection);

        dbCon.Open();
        OleDbCommand com = dbCon.CreateCommand();
        com.CommandText = "Update PayClaim Set totalHours=?, dateWorked=? where payClaimId=?";
        try
        {
            com.Parameters.AddWithValue("payClaimId", payClaimId);
            com.Parameters.AddWithValue("dateWorked", dateWorked);
            com.Parameters.AddWithValue("totalHours", totalHours);
            return com.ExecuteNonQuery();
        }
        catch
        {
            throw;
        }
        finally
        {
            com.Dispose();
            dbCon.Close();
            dbCon.Dispose();
        }
    }
4

2 に答える 2

0

あなたの質問に答えるには、PayClaim updatepayclaim メソッドのコードを表示する必要があると思います。

あなたの説明から、0より大きいリターンコード(res> 0)とラベルの設定が重複しているだけでなく、例外が発生していると思います-コードで例外が発生した場合、ステータスラベルは「エラー. '

どうか明らかにしてください。

于 2012-06-30T12:41:34.817 に答える
0

それは正しい構文ではないと思います。私はこのようなことを試してみます:

com.CommandText = "Update PayClaim Set totalHours='@pTotalHours', dateWorked='@pDateWorked' where payClaimId='@pPayClaimId'";
try
{
    com.Parameters.AddWithValue("@pPayClaimId", payClaimId);
    com.Parameters.AddWithValue("@pDateWorked", dateWorked);
    com.Parameters.AddWithValue("@pTotalHours", totalHours);
    return com.ExecuteNonQuery();
}

エラーの場合は-1、行が更新されていない場合は0の場合、の値を知りたいとres思います(後者について確認するには、-2のようにゼロ以外に初期化する必要があります)。

于 2012-07-01T23:04:19.167 に答える