0

I am using Jqgrid to display my data into jqgrid using web services in asp.net...but it is loading only when I am giving limit in the query.If I want to load all the data using second commneted query in the code then its not loading and giving error ""Message":"Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property."

Here is my entire Module Architecture...

index.aspx page...

<script type="text/javascript">
    $(function () {
        $("#table").jqGrid({
            datatype: function (pdata) { getData(pdata); },
            height: 500,
            colNames: ['username', 'ordinal', 'authcode', 'extension', 'trunk', 'dialnumber', 'dialdate', 'dialtime', 'duration', 'destination', 'price', 'toc'],
            colModel: [
                    { name: 'username', width: 100, sortable: true, align: 'center' },
                    { name: 'ordinal', width: 100, sortable: true, align: 'center' },
                    { name: 'authcode', width: 100, sortable: true },
                    { name: 'extension', width: 100, sortable: true, align: 'center' },
                    { name: 'trunk', width: 100, sortable: true, align: 'center' },
                    { name: 'dialnumber', width: 100, sortable: true, align: 'center' },
                    { name: 'dialdate', width: 100, sortable: true, align: 'center' },
                    { name: 'dialtime', width: 100, sortable: true, align: 'center' },
                    { name: 'duration', width: 100, sortable: true, align: 'center' },
                    { name: 'destination', width: 100, sortable: true, align: 'center' },
                    { name: 'price', width: 100, sortable: true, align: 'center' },
                    { name: 'toc', width: 100, sortable: true, align: 'center' }
                ],
            rowNum: 100,
            rowList: [100, 200, 300],
            pager: '#UsersGridPager',
            sortname: 'username',
            sortable: true,
            viewrecords: true,
            sortorder: 'asc',
            shrinkToFit: false,
            rownumbers: true,
            loadtext: 'Loading..'

        });
        jQuery("#table").jqGrid('navGrid', '#UsersGridPager', { add: false, edit: false, del: false, search: true, refresh: true });
    });


    function getData(pData) {
        $.ajax({
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            url: '<%= ResolveClientUrl("~/WebService.asmx/GetListOfPersons") %>',
            data: '{}',
            dataType: "json",
            success: function (data, textStatus) {
                if (textStatus == "success")
                    ReceivedClientData(JSON.parse(getMain(data)).rows);
            },
            error: function (data, textStatus) {
                alert('An error has occured retrieving data!');
            }
        });
    }


    function ReceivedClientData(data) {
        var thegrid = $("#table");
        thegrid.clearGridData();
        for (var i = 0; i < data.length; i++)
            thegrid.addRowData(i + 1, data[i]);
    }


    function getMain(dObj) {
        if (dObj.hasOwnProperty('d'))
            return dObj.d;
        else
            return dObj;
    }
</script>

JsonHelper.cs file

// Convert Object to Json String
// <param name="obj">The object to convert</param>
// <returns>Json representation of the Object in string</returns>

public static string ToJson(object obj)
{
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
}

public static List<Person> GetPersons()
{
    List<Person> persons = new List<Person>();
    string connectionString = "Server=localhost;Port=3306;Database=projecttt;UID=root;Pwd=techsoft;pooling=false";

    MySqlConnection conn;
    conn = new MySqlConnection(connectionString);
    conn.Open();

    string s = "SELECT username,ordinal,authcode,extension,trunk,dialnumber,dialdate,dialtime,duration,destination,price,toc FROM processeddata_table order by username limit 0,200";
   // string s = "SELECT username,ordinal,authcode,extension,trunk,dialnumber,dialdate,dialtime,duration,destination,price,toc FROM processeddata_table ";
    MySqlCommand cmd = new MySqlCommand(s,conn);

    cmd.ExecuteNonQuery();

    using (MySqlDataReader dr = cmd.ExecuteReader())
    {

        while (dr.Read())
        {
            persons.Add(new Person()
            {
                username = Convert.ToString(dr["username"]),
                ordinal = Convert.ToString(dr["ordinal"]),
                authcode = Convert.ToString(dr["authcode"]),
                extension = Convert.ToString(dr["extension"]),
                trunk = Convert.ToString(dr["trunk"]),
                dialnumber = Convert.ToString(dr["dialnumber"]),
                dialdate = Convert.ToString(dr["dialdate"]),
                dialtime = Convert.ToString(dr["dialtime"]),
                duration = Convert.ToString(dr["duration"]),
                destination = Convert.ToString(dr["destination"]),
                price = Convert.ToString(dr["price"]),
                toc = Convert.ToString(dr["toc"])

            });
        }

    }

    return persons;
}

}

PagedList.cs File

IEnumerable _rows;
int _totalRecords;
int _pageIndex;
int _pageSize;
object _userData;

public PagedList(IEnumerable rows, int totalRecords, int pageIndex, int pageSize, object userData)
{
    _rows = rows;
    _totalRecords = totalRecords;
    _pageIndex = pageIndex;
    _pageSize = pageSize;
    _userData = userData;
}

public PagedList(IEnumerable rows, int totalRecords, int pageIndex, int pageSize)
    : this(rows, totalRecords, pageIndex, pageSize, null)
{
}

public int total { get { return (int)Math.Ceiling((decimal)_totalRecords / (decimal)_pageSize); } }

public int page { get { return _pageIndex; } }

public int records { get { return _totalRecords; } }

public IEnumerable rows { get { return _rows; } }

public object userData { get { return _userData; } }

public override string ToString()
{
    return Newtonsoft.Json.JsonConvert.SerializeObject(this);
}

}

webservices.cs

[WebMethod]
[ScriptMethod]

public string GetListOfPersons()
{
    List<Person> persons = JsonHelper.GetPersons();
    return Newtonsoft.Json.JsonConvert.SerializeObject(new PagedList(persons, persons.Count, 1, persons.Count));
}

}

Person.cs

public string username { get; set; }
public string ordinal { get; set; }
public string authcode { get; set; }
public string extension { get; set; }
public string trunk { get; set; }
public string dialnumber { get; set; }
public string dialdate { get; set; }
public string dialtime { get; set; }
public string duration { get; set; }
public string destination { get; set; }
public string price { get; set; }
public string toc { get; set; }

Plz guys Help me .THanx in advance..

Kris
  • 1,882
  • 1
  • 20
  • 23
vikas
  • 101
  • 1
  • 3
  • 16

1 Answers1

0

Why are you using ExecuteNonQuery() for select ? try ExecuteReader() method.

See this :- Question on MaxJsonLength

For local pagination loadonce: true can be used but still you will get the same error as you are trying to load too much data which is not advised. Also, ajax requests are used to handle small amount of data

Community
  • 1
  • 1
Kris
  • 1,882
  • 1
  • 20
  • 23
  • @Krish thnx sir for ur response ..I changed it but problem is same – vikas Feb 04 '13 at 09:50
  • Whats the json response in firefox console or chrome developer console ? – Kris Feb 04 '13 at 09:54
  • Sir if I am executing the query with limited records like like limit 100 then it is getting populated in the first page and result is in console...but if i go with query with out limit then it is trying to load all the records at the same time and giving error ""Message":"Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.","StackTrace":"" – vikas Feb 04 '13 at 09:58
  • See this :- http://stackoverflow.com/questions/1151987/can-i-set-an-unlimited-length-for-maxjsonlength-in-web-config – Kris Feb 04 '13 at 10:02
  • Sir i think that it is not calculating the number of rows per page from the client page and it is trying to load all data at the same time so giving maxlength error – vikas Feb 04 '13 at 10:34
  • @vikas I dont think its possible to load all 1 lakh 55 thousand records at once – Kris Feb 04 '13 at 10:36
  • yes sir but jqgrid is enabled with paging facility ..how to do that – vikas Feb 04 '13 at 10:41
  • To achieve this loadonce: true is used but still you will get the same error as you are trying to load too much data which is not advised – Kris Feb 04 '13 at 10:48