// private function for creating Column Names // Return number of colums read private int ReadColumnNames(Vdbe vm, DataTable table) { String columnName = ""; int columnType = 0; // returns number of columns returned by statement int columnCount = #if NET_35 Sqlite3.ColumnCount #else Sqlite3.sqlite3_column_count #endif (vm); object[] columnValues = new object[columnCount]; try { // reads columns one by one for (int i = 0; i < columnCount; i++) { columnName = #if NET_35 Sqlite3.ColumnName #else Sqlite3.sqlite3_column_name #endif (vm, i); columnType = #if NET_35 Sqlite3.ColumnType #else Sqlite3.sqlite3_column_type #endif (vm, i); switch (columnType) { case Sqlite3.SQLITE_INTEGER: { // adds new integer column to table table.Columns.Add(columnName, Type.GetType("System.Int64")); break; } case Sqlite3.SQLITE_FLOAT: { table.Columns.Add(columnName, Type.GetType("System.Double")); break; } case Sqlite3.SQLITE_TEXT: { table.Columns.Add(columnName, Type.GetType("System.String")); break; } case Sqlite3.SQLITE_BLOB: { table.Columns.Add(columnName, Type.GetType("System.byte[]")); break; } default: { table.Columns.Add(columnName, Type.GetType("System.String")); break; } } } } catch { return(0); } return(table.Columns.Count); }
// private function for reading rows and creating table and columns private int ReadNextRow(Vdbe vm, DataTable table) { int columnCount = table.Columns.Count; if (columnCount == 0) { if ((columnCount = ReadColumnNames(vm, table)) == 0) { return(Sqlite3.SQLITE_ERROR); } } int resultType; if ((resultType = #if NET_35 Sqlite3.Step #else Sqlite3.sqlite3_step #endif (vm)) == Sqlite3.SQLITE_ROW) { object[] columnValues = new object[columnCount]; for (int i = 0; i < columnCount; i++) { int columnType = #if NET_35 Sqlite3.ColumnType #else Sqlite3.sqlite3_column_type #endif (vm, i); switch (columnType) { case Sqlite3.SQLITE_INTEGER: { table.Columns[i].DataType = typeof(Int64); columnValues[i] = #if NET_35 Sqlite3.ColumnInt #else Sqlite3.sqlite3_column_int #endif (vm, i); break; } case Sqlite3.SQLITE_FLOAT: { table.Columns[i].DataType = typeof(Double); columnValues[i] = #if NET_35 Sqlite3.ColumnDouble #else Sqlite3.sqlite3_column_double #endif (vm, i); break; } case Sqlite3.SQLITE_TEXT: { table.Columns[i].DataType = typeof(String); columnValues[i] = #if NET_35 Sqlite3.ColumnText #else Sqlite3.sqlite3_column_text #endif (vm, i); break; } case Sqlite3.SQLITE_BLOB: { table.Columns[i].DataType = typeof(Byte[]); columnValues[i] = #if NET_35 Sqlite3.ColumnBlob #else Sqlite3.sqlite3_column_blob #endif (vm, i); break; } default: { table.Columns[i].DataType = null; columnValues[i] = ""; break; } } } table.Rows.Add(columnValues); } return(resultType); }