ASP.net对象源参数

ASP.net对象源参数,asp.net,objectdatasource,Asp.net,Objectdatasource,我有一个ObjectDataSource,其中包含一个查询字符串中的参数。我收到以下错误:值对于Int32太大或太小。我认为查询字符串对于其数据类型可能太长。InfoSheetID是从数据库填充的。我是否可以选择或修改ObjectDataSource以防止错误 <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}"

我有一个ObjectDataSource,其中包含一个查询字符串中的参数。我收到以下错误:

值对于Int32太大或太小。


我认为查询字符串对于其数据类型可能太长。InfoSheetID是从数据库填充的。我是否可以选择或修改ObjectDataSource以防止错误

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
OldValuesParameterFormatString="original_{0}" 
        SelectMethod="GetInfoByInfoID" 
        TypeName="BLL.InfoViewBLL">
        <SelectParameters>
            <asp:QueryStringParameter DefaultValue="2148663911" Name="InfoSheetID" 
                QueryStringField="InfoSheetID" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>

Int32.MaxValue为2'147'483'647,低于您使用的2'148'663'911

您可以将类型更改为Int64或重构代码以避免使用如此大的值

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
OldValuesParameterFormatString="original_{0}" 
        SelectMethod="GetInfoByInfoID" 
        TypeName="BLL.InfoViewBLL">
        <SelectParameters>
            <asp:QueryStringParameter DefaultValue="2148663911" Name="InfoSheetID" 
                                                    ^^^^^^^^^^
                QueryStringField="InfoSheetID" Type="Int64" />
                                                     ^^^^^
        </SelectParameters>
    </asp:ObjectDataSource>

^^^^^

谢谢。我尝试了此操作,但出现以下错误。
类型为“System.Int64”的对象无法转换为类型为“System.Int32”。
在配置数据源中,当要求选择方法时,它只有GetInfoByInfoID(Int32 InfoSheetID),返回可用的InfoDataTable选项。没有Int64。错误是DefaultValue=“2148663911”。确保你真的需要这个号码。此外,还可以使用string代替Int32,并为GetInfoByInfoID()方法生成int.TryParse()。无论如何,我希望看到默认值==0或-1,这取决于任务。我只使用默认值来显示查询字符串的编号。它将被删除,没有默认值。我将尝试TryParse(),它看起来像是一个数据库使用long for Id。你能更新GetInfoByInfoID()方法来接收int64吗?我让它工作了。我将我的业务逻辑类中的公共函数改为<代码>(ByValIfSoHeTeD作为It64),作为IoFoDATABATION.<代码>谢谢您的帮助。以及潜在的长度问题,考虑如何处理由用户输入的任意非整数值。例如267.52或“你好”。在大多数情况下,这不会是一个问题,但在这些情况下,盲目地强制转换值将导致异常,并且查询字符串特别容易更改。