2013-03-09 50 views
1

我有一個帶查詢字符串參數的ObjectDataSource。我收到以下錯誤:

Value was either too large or too small for an Int32.

我相信查詢字符串可能太長,因爲它的數據類型。 InfoSheetID從數據庫填充。是否有另一個選項我可以採取或修改ObjectDataSource以防止錯誤?ASP.net ObjectSource參數

<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> 
+0

除了潛在的長度問題,請考慮如何處理用戶輸入的任意非整數值。例如267.52或「你好」。在大多數情況下,這不是一個問題,但盲目地轉換值會導致這些情況下的異常,並且查詢字符串特別容易改變。 – pwdst 2013-03-09 22:40:08

回答

2

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> 
+0

謝謝。我嘗試過,並得到以下錯誤.'類型'System.Int64'的對象不能轉換爲類型'System.Int32'.'在配置數據源中,當要求選擇一個方法時,它只有GetInfoByInfoID(Int32 InfoSheetID) ,返回InfoDataTable選項可用。沒有Int64。 – 2013-03-09 20:30:01

+0

錯誤在於DefaultValue =「2148663911」。確保你確實需要這個號碼。你也可以使用字符串來代替Int32,併爲GetInfoByInfoID()方法創建一個int.TryParse()。無論如何,我寧願看到默認值== 0或-1取決於任務。 – Warlock 2013-03-09 20:42:03

+0

我只把默認值顯示查詢字符串的數字。它被刪除,沒有默認值。我會嘗試TryParse() – 2013-03-09 20:48:14