3

私は以下のこのエラーを受け取ります:

ORA-01036:変数name/numberが不正です。

このエラーは、更新または削除がクリックされた場合にのみ発生します(更新を機能させるには、すべてのテキストボックスが完成している必要があります)。最終的にSQLデータベースからOracleデータベースに変更しましたが、あちこちで小さな問題が発生していました。行の編集とキャンセルは正常に機能します。以下に私の質問を含めます:

protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        if (e.CommandName == "Insert") //- this is needed to explain that the INSERT command will only work when INSERT is clicked
        {
            gv.DataBind();

            DataTable d = dbcon.GetDataTable("SELECT * FROM CIS.CIS_TRANS ORDER BY ID DESC", "ProjectCISConnectionString");

            string transCode = "", fundCode = "", BSA_CD = "", DP_TYPE = "";

            if (d.Rows.Count > 0)
            {
                transCode = d.Rows[0]["TRANS_CD"].ToString();
                fundCode = d.Rows[0]["FUND_CD"].ToString();
                BSA_CD = d.Rows[0]["BSA_CD"].ToString();
                DP_TYPE = d.Rows[0]["DP_TYPE"].ToString();

                if (transCode.Trim().Length > 0)
                {
                    dbcon.Execute("INSERT INTO CIS.CIS_TRANS (ID,TRANS_CD) VALUES(CIS.S_CIS_TRANS.nextval,'')", "ProjectCISConnectionString");

                    gv.DataBind();
                }
            }

            gv.EditIndex = gv.Rows.Count - 1;

        }
        else if (e.CommandName == "Cancel")
        {
            DataTable d = dbcon.GetDataTable("SELECT * FROM CIS.CIS_TRANS ORDER BY ID DESC", "ProjectCISConnectionString");

            string transCode = "";

            if (d.Rows.Count > 0)
            {
                transCode = d.Rows[0]["TRANS_CD"].ToString();

                if (transCode.Trim().Length == 0)
                {
                    dbcon.Execute(string.Format("DELETE CIS.CIS_TRANS WHERE ID = '{0}'", d.Rows[0]["ID"]), "ProjectCISConnectionString");

                    gv.DataBind();
                }
            }

コードの他の部分を含める必要がある場合は、遠慮なく言ってください。すぐに含めます。

以下は私のソースコードです:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ProjectCISConnectionString %>" ProviderName="<%$ConnectionStrings:ProjectCISConnectionString.ProviderName %>"
            SelectCommand="SELECT * FROM CIS.CIS_TRANS ORDER BY ID ASC" 
            DeleteCommand="DELETE FROM CIS.CIS_TRANS WHERE ID = @ID"
            InsertCommand="INSERT INTO CIS.CIS_TRANS (TRANS_CD,FUND_CD,BSA_CD,DP_TYPE,TRANS_CD_DESC) VALUES (@TRANS_CD,@FUND_CD,@BSA_CD,@DP_TYPE,@TRANS_CD_DESC)"
            UpdateCommand="UPDATE CIS.CIS_TRANS SET TRANS_CD = @TRANS_CD, FUND_CD = @FUND_CD, BSA_CD = @BSA_CD, DP_TYPE = @DP_TYPE, TRANS_CD_DESC =@TRANS_CD_DESC WHERE ID = @ID">

        </asp:SqlDataSource>
4

2 に答える 2

1

Oracle ADO.NETライブラリでは、エンジンに渡すすべてのパラメータ:ではなく、プレフィックスが必要です。@

パラメータのプレフィックスをからに変更するだけ@です:

于 2012-08-07T20:37:26.613 に答える
0

IDフィールドは数値または文字列ですか。キャンセルではID値を一重引用符で囲んでいるのに対し、DELETEではそうではないため、キャンセルが機能してDELETEが失敗する可能性があります。

于 2012-08-07T15:34:03.987 に答える