JSON.net serialisieren direkt von oledbconnection

Ich habe derzeit einen Handler, der den Dateipfad und den Tab-Namen für eine Excel-Datei verwendet, die Datei in eine Datentabelle verarbeitet und die Tabelle anschließend in eine JSON-Zeichenfolge serialisiert, um sie zurückzugeben. Dies funktioniert, bis ich versuche, eine große Datei zu verarbeiten, und dann eine Ausnahme wegen Speichermangel erhalte.

Ich dachte, dass es die Speichernutzung reduzieren würde, wenn ich nicht alles zuerst in die Datentabelle und stattdessen direkt in die JSON-Zeichenfolge lade. Ich konnte jedoch keine Beispiele dafür finden.

Kann ich direkt von der OleDbConnection in einen String serialisieren? Wie

    public void ProcessRequest(HttpContext context)
    {
        string path = context.Request["path"];
        string tableNames = context.Request["tableNames"];

        string connectionString = string.Empty;
        if (path.EndsWith(".xls"))
        {
            connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source={0};
                Extended Properties=""Excel 8.0;HDR=YES;IMEX=1""", path);
        }
        else if (path.EndsWith(".xlsx"))
        {
            connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source={0};
                Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1""", path);
        }
        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");

        DbDataAdapter adapter = factory.CreateDataAdapter();
        OleDbConnection conn = new OleDbConnection(connectionString);
        conn.Open();

        DataTable tmp = new DataTable();

        DbCommand selectCommand = factory.CreateCommand();

        selectCommand.CommandText = String.Format("SELECT * FROM [{0}]", tableNames);
        selectCommand.Connection = conn;
        adapter.SelectCommand = selectCommand;


        adapter.Fill(tmp);
        string tabdata = JsonConvert.SerializeObject(tmp);
        context.Response.Write(tabdata);
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage