我使用的是.net2005,语言是C#。在做页面时,将gridview的数据源(sqldatasource)配置select语句使用‘指定自定义sql语句或存储过程’,但我在该页面源中增加如下语句:OldValuesParameterFormatString="original_{0}"
SelectCommand="SELECT qhdm,jgdm, qhtype, qhmc, scrq, scuserid, qhzt FROM sc_info WHERE  year(scrq) = year(getutcdate()) AND month(scrq) = month(getutcdate())"
            DeleteCommand="DELETE FROM sc_mxinfo WHERE qhdm=@original_qhdm;delete from sc_info where qhdm=@original_qhdm">
            <DeleteParameters>
                <asp:Parameter Name="original_qhdm" Type="Decimal" />
            </DeleteParameters>
然后在调试时,数据可以删除,但页面会报错,我怀疑是不是"original_qhdm"变量的类型设置有问题,但我将“type”改为"int32",报错依旧。后台数据库是sqlserver2000。库里qhdm的类型是numeric.
网页报错信息如下:指定的参数已超出有效值的范围。
参数名: value 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。
参数名: value源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。
参数名: value]
   System.Web.UI.WebControls.GridView.set_SelectedIndex(Int32 value) +79
   System.Web.UI.WebControls.GridView.HandleDeleteCallback(Int32 affectedRows, Exception ex) +495
   System.Web.UI.DataSourceView.Delete(IDictionary keys, IDictionary oldValues, DataSourceViewOperationCallback callback) +227
   System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +912
   System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +1067
   System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +211
   System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +242
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3838

解决方案 »

  1.   

    我在该页面源中增加如下语句:......
    <asp:CommandField ShowDeleteButton="True"  />
    ......
    ......
    ......
    OldValuesParameterFormatString="original_{0}"
    SelectCommand="SELECT qhdm,jgdm, qhtype, qhmc, scrq, scuserid, qhzt FROM sc_info WHERE  year(scrq) = year(getutcdate()) AND month(scrq) = month(getutcdate())"
                DeleteCommand="DELETE FROM sc_mxinfo WHERE qhdm=@original_qhdm;delete from sc_info where qhdm=@original_qhdm">
                <DeleteParameters>
                    <asp:Parameter Name="original_qhdm" Type="Decimal" />
                </DeleteParameters>
      

  2.   

    强制转换一下,或者先把数据库里面的类型改成int试试看
      

  3.   

    是不是DeleteCommand的字符串不能带两天sql语句。