// 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 = CSSQLite.sqlite3_column_count(vm); object[] columnValues = new object[columnCount]; try { // reads columns one by one for (int i = 0; i < columnCount; i++) { columnName = CSSQLite.sqlite3_column_name(vm, i); columnType = CSSQLite.sqlite3_column_type(vm, i); switch (columnType) { case CSSQLite.SQLITE_INTEGER: { // adds new integer column to table table.Columns.Add(columnName, Type.GetType("System.Int64")); break; } case CSSQLite.SQLITE_FLOAT: { table.Columns.Add(columnName, Type.GetType("System.Double")); break; } case CSSQLite.SQLITE_TEXT: { table.Columns.Add(columnName, Type.GetType("System.String")); break; } case CSSQLite.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(CSSQLite.SQLITE_ERROR); } } int resultType; if ((resultType = CSSQLite.sqlite3_step(vm)) == CSSQLite.SQLITE_ROW) { object[] columnValues = new object[columnCount]; for (int i = 0; i < columnCount; i++) { int columnType = CSSQLite.sqlite3_column_type(vm, i); switch (columnType) { case CSSQLite.SQLITE_INTEGER: { columnValues[i] = CSSQLite.sqlite3_column_int64(vm, i); break; } case CSSQLite.SQLITE_FLOAT: { columnValues[i] = CSSQLite.sqlite3_column_double(vm, i); break; } case CSSQLite.SQLITE_TEXT: { columnValues[i] = CSSQLite.sqlite3_column_text(vm, i); break; } case CSSQLite.SQLITE_BLOB: { byte[] data = CSSQLite.sqlite3_column_blob(vm, i); columnValues[i] = Convert.ToBase64String(data); break; } default: { columnValues[i] = ""; break; } } } table.Rows.Add(columnValues); } return(resultType); }
// 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(CSSQLite.SQLITE_ERROR); } } int resultType; if ((resultType = CSSQLite.sqlite3_step(vm)) == CSSQLite.SQLITE_ROW) { object[] columnValues = new object[columnCount]; for (int i = 0; i < columnCount; i++) { int columnType = CSSQLite.sqlite3_column_type(vm, i); switch (columnType) { case CSSQLite.SQLITE_INTEGER: { columnValues[i] = CSSQLite.sqlite3_column_int(vm, i); break; } case CSSQLite.SQLITE_FLOAT: { columnValues[i] = CSSQLite.sqlite3_column_double(vm, i); break; } case CSSQLite.SQLITE_TEXT: { columnValues[i] = CSSQLite.sqlite3_column_text(vm, i); break; } case CSSQLite.SQLITE_BLOB: { // Something goes wrong between adding this as a column value and converting to a row value. byte[] encBlob = CSSQLite.sqlite3_column_blob(vm, i); string base64 = Convert.ToBase64String(encBlob); //byte[] decPass = ProtectedData.Unprotect(encBlob, null, DataProtectionScope.CurrentUser); //string password = Encoding.ASCII.GetString(decPass); //columnValues[i] = password; columnValues[i] = base64; break; } default: { columnValues[i] = ""; break; } } } table.Rows.Add(columnValues); } return(resultType); }