簡體   English   中英

為什么使用ASP.Net的ajax中的字符串會出現“ System.IndexOutOfRangeException”?

[英]Why “System.IndexOutOfRangeException” occurs for string in ajax using ASP.Net?

實際上,如果我刪除了一個特定的string變量,我的ajax代碼將運行完美

我正在調用ajax,然后服務器將從SQL Server中選擇一些數據並將其存儲到字符串變量中。 除一個變量外,每個變量均完美返回。 當我檢查控制台時,它返回異常“ System.IndexOutOfRangeException

這是我的ajax代碼

$('.list-of-link').on('click', 'a', function (e) {
    e.preventDefault();// add this line
    alert($(this).html());
    //window.location.replace("ReportTotalSalesPivot.aspx");
    var userFileName = $(this).html();

    $.ajax({
        url: 'SavedReports.aspx/getReportDetails',
        method: 'post',
        contentType: 'application/json',
        data: '{userFileName:"' + userFileName + '"}',
        dataType:'json',
        success: function (data) {
            alert('success : ReportData = ' + data.d.ReportData);
        },
        error: function (error) {
            alert('Please Call Administrator');
        }
    })
})

WebMethod代碼

[WebMethod]
    public static SavedReport getReportDetails(string userFileName)
    {
        string cs = ConfigurationManager.ConnectionStrings["HQWebMatajer13"].ConnectionString;
        using (SqlConnection con = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "select ReportData,ReportFilter,FromDate,ToDate,SelectedData,SelectedCoulmn,SelectedRow,HiddenTableRecord ToDate FROM [HQWebMatajer].[dbo].[ReportSave] where UserID=@UserID and UserFileName=@UserFileName";
            cmd.Parameters.AddWithValue("@UserID", UserID);
            cmd.Parameters.AddWithValue("@UserFileName", userFileName);

            con.Open();

            SavedReport savedReport = new SavedReport();

            SqlDataReader rd = cmd.ExecuteReader();

            while (rd.Read())
            {
                byte[] binaryString = (byte[])rd["ReportData"];
                savedReport.ReportData = Encoding.UTF8.GetString(binaryString);

                savedReport.ReportFilter = rd["ReportFilter"].ToString();
                savedReport.FromDate = rd["FromDate"].ToString();
                savedReport.ToDate = rd["ToDate"].ToString();
                savedReport.SelectedData = rd["SelectedData"].ToString();
                savedReport.SelectedColumn = rd["SelectedCoulmn"].ToString();
                savedReport.SelectedRow = rd["SelectedRow"].ToString();
                savedReport.HiddenTableRecord = rd["HiddenTableRecord"].ToString();
            }
            return savedReport;
        }

    }

最后一個變量 HiddenTableRecord 發生錯誤

以下記錄是SQL Server tq.StoreID$$$ IN('1001')$$$ HiddenTableRecord實際記錄

SavedReport類代碼

public class SavedReport
{
    public string UserID { get; set; }
    public string ReportName { get; set; }
    public string UserFileName { get; set; }
    public string ReportData { get; set; }
    public string ReportFilter { get; set; }
    public string FromDate { get; set; }
    public string ToDate { get; set; }
    public string SelectedData { get; set; }
    public string SelectedColumn { get; set; }
    public string SelectedRow { get; set; }
    public string HiddenTableRecord { get; set; }
}

錯誤味精

{消息:“ HiddenTableRecord”,…}

ExceptionType:“ System.IndexOutOfRangeException”

訊息:“ HiddenTableRecord”

注意

如果我對此行發表評論,則savedReport.HiddenTableRecord = rd["HiddenTableRecord"].ToString(); 不會發生錯誤,它會返回我期望的所有記錄

問題來了,因為您的SqlDataReader不包含“ HiddenTableRecord”

也許您的SqlRequest中有一個問題(示例中HiddenTableRecordToDate之間缺少逗號):

“從[HQWebMatajer]中選擇ReportData,ReportFilter,FromDate,ToDate,SelectedData,SelectedCoulmn,SelectedRow,HiddenTableRecord ToDate。[dbo]。[ReportSave]其中UserID = @ UserID和UserFileName = @ UserFileName”;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM