This script is very kindly provided by LionHeart and allows DataTables with server-side processing to retrieve data from a server configured with ASP.NET and SQL Server 2008.
To use the code on your own server you will need to modify the script to read and deal with the column names in your database (the standard DataTables example schema is used here). You will also need to modify the database connection variables: SQL_SERVER, USERNAME etc.
Imports System.Data.SqlClient Partial Public Class DTServeur Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'Instanciation des variables 'Creation of variables Dim str As String = "" 'Chaîne JSON en sortie - Will be the output JSON string Dim strClassement As String = "" 'Colonne sur laquelle le tableau est trié - Will be the sorted column Dim strSens As String = "" 'ASC or DESC Dim strSensInverse As String = "" 'DESC or ASC 'Détection de la colonne de tri 'Detection of sorted column Select Case Request("iSortCol_0") Case 0 strClassement = "engine" Case 1 strClassement = "browser" Case 2 strClassement = "platform" Case 3 strClassement = "version" Case 4 strClassement = "grade" Case Else strClassement = "engine" End Select 'Détection du sens du tri 'detection of direction of the sort Select Case Request("sSortDir_0") Case "asc" strSens = " ASC" strSensInverse = " DESC" Case "desc" strSens = " DESC" strSensInverse = " ASC" End Select 'Connexion SQL 'SQL connection Dim maConnexion As SqlConnection Dim strConnect As String = "server={SQL_SERVER}" & "; uid={USERNAME}" & ";pwd={PASSWORD}" & "; database={DATABASE}" maConnexion = New SqlConnection(strConnect) maConnexion.Open() Dim dataset As New DataSet 'Création de la requête SQL 'SQL request creation Dim strRequeteA As New String("") Dim strRequeteC As New String("") Dim strRequeteB_1 As New String("") Dim strRequeteB_2 As New String("") Dim strRequeteB_3 As New String("") 'Le requête est bâtie selon une méthode permettant la pagination avec SQL Server 'The request is built with a method which allow pagination with SQL Server ' http://troels.arvin.dk/db/rdbms/ strRequeteA += "SELECT * FROM (" strRequeteA += "SELECT TOP " strRequeteA += Request("iDisplayLength").ToString strRequeteA += " * FROM (" strRequeteB_1 = "SELECT " strRequeteB_2 = "TOP " + (Convert.ToInt32(Request("iDisplayStart")) + Convert.ToInt32(Request("iDisplayLength"))).ToString strRequeteB_3 += " id, engine, browser, platform, version, grade " strRequeteB_3 += "FROM ajax " If Request("sSearch") <> "" Then If Request("sSearch") <> " " Then strRequeteB_3 += "WHERE " Dim chaine As String For i As Integer = 0 To (Split(Request("sSearch").ToString, " ").Length - 1) chaine = Split(Request("sSearch").ToString, " ")(i) If chaine <> "" Then If i <> 0 Then strRequeteB_3 += "AND (" Else strRequeteB_3 += "(" End If strRequeteB_3 += "engine LIKE '%" + chaine + "%'" strRequeteB_3 += " OR " strRequeteB_3 += "browser LIKE '%" + chaine + "%'" strRequeteB_3 += " OR " strRequeteB_3 += "platform LIKE '%" + chaine + "%'" strRequeteB_3 += " OR " strRequeteB_3 += "version LIKE '%" + chaine + "%'" strRequeteB_3 += " OR " strRequeteB_3 += "grade LIKE '%" + chaine + "%'" strRequeteB_3 += ") " End If Next End If End If strRequeteC += " ORDER BY " strRequeteC += strClassement strRequeteC += strSens strRequeteC += ") AS foo ORDER BY " strRequeteC += strClassement strRequeteC += strSensInverse strRequeteC += ") AS bar ORDER BY " strRequeteC += strClassement strRequeteC += strSens 'Exécution de la requête 'Request execution Dim MaCommande As New SqlCommand(strRequeteA + strRequeteB_1 + strRequeteB_2 + strRequeteB_3 + strRequeteC, maConnexion) Dim MonAdapteur As SqlDataAdapter = New SqlDataAdapter(MaCommande) MonAdapteur.Fill(dataset) MaCommande.Dispose() If dataset.Tables.Count > 0 Then Dim table As New DataTable table = dataset.Tables(0) 'Ecriture des données JSON 'JSON data writing str = "{" str += """sEcho"": " + Request("sEcho") + "," 'Requête permettant l'écriture du nombre total d'enregistrements 'Request finding the total records number strRequeteA = "SELECT COUNT(id) FROM ajax" dataset = New DataSet MaCommande = New SqlCommand(strRequeteA, maConnexion) MonAdapteur = New SqlDataAdapter(MaCommande) MonAdapteur.Fill(dataset) MaCommande.Dispose() str += """iTotalRecords"": " + dataset.Tables(0).Rows(0)(0).ToString + "," 'Requête permettant l'écriture du nombre d'enregistrement filtrés 'Request finding the displayed records number strRequeteA = "SELECT COUNT(id) FROM (" + strRequeteB_1 + strRequeteB_2 + strRequeteB_3 + ") AS P1" dataset = New DataSet MaCommande = New SqlCommand("SELECT COUNT(id) FROM (" + strRequeteB_1 + strRequeteB_3 + ") AS P1", maConnexion) MonAdapteur = New SqlDataAdapter(MaCommande) MonAdapteur.Fill(dataset) MaCommande.Dispose() str += """iTotalDisplayRecords"": " + dataset.Tables(0).Rows(0)(0).ToString + "," str += """aaData"": [" 'Procédure évitant les doublons dans la dernière page 'Procedure avoiding double records in last page Dim nbRowANePasAfficher As Integer = 0 If (Convert.ToInt32(Request("iDisplayStart")) + Convert.ToInt32(Request("iDisplayLength"))) > dataset.Tables(0).Rows(0)(0) Then nbRowANePasAfficher = (Convert.ToInt32(Request("iDisplayStart")) + Convert.ToInt32(Request("iDisplayLength"))) - dataset.Tables(0).Rows(0)(0) End If If Convert.ToInt32(Request("iDisplayStart")) = 0 Then nbRowANePasAfficher = 0 End If 'Ecriture des données JSON 'JSON data writing Dim autre As Boolean = False For Each row As DataRow In table.Rows If nbRowANePasAfficher > 0 Then nbRowANePasAfficher -= 1 Continue For End If If autre = True Then str += "," End If str += "[" str += """" + row("engine").ToString + """," str += """" + row("browser").ToString + """," str += """" + row("platform").ToString + """," str += """" + row("version").ToString + """," str += """" + row("grade").ToString + """" str += "]" autre = True Next End If str += "]" str += "}" Response.Write(str) maConnexion.Close() End Sub End Class