/// <inheritdoc />
 public override void Close()
 {
     // are we closing the connection?
     if ((_commandBehavior & CommandBehavior.CloseConnection) != 0)
     {
         _connection?.Close();
     }
     _worker = null;
     _closed = true;
 }
 internal SQLiteServerDataReader(ISQLiteServerDataReaderWorker worker,
                                 SQLiteServerConnection connection,
                                 CommandBehavior commandBehavior)
 {
     if (null == worker)
     {
         throw new ArgumentNullException(nameof(worker), "The worker cannot be null");
     }
     _worker          = worker;
     _connection      = connection;
     _commandBehavior = commandBehavior;
 }
Esempio n. 3
0
        /// <summary>
        /// Create a row header given the reader.
        /// Header data is data that can be used before we call Read
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="guid">The command Guid</param>
        /// <returns></returns>
        private static RowHeader BuildRowHeader(ISQLiteServerDataReaderWorker reader, string guid)
        {
            var header = new RowHeader
            {
                TableNames = new List <string>(),
                Names      = new List <string>(),
                Types      = new List <int>(),
                HasRows    = reader.HasRows,
                Guid       = guid
            };

            // get the headers.
            for (var i = 0; i < reader.FieldCount; ++i)
            {
                header.Names.Add(reader.GetName(i));
                header.TableNames.Add(reader.GetTableName(i));
                header.Types.Add((int)Field.TypeToFieldType(reader.GetFieldType(i)));
            }

            return(header);
        }
Esempio n. 4
0
        /// <summary>
        /// Build the row data, this assumes that read has been called already.
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        private static RowData BuildRowData(ISQLiteServerDataReaderWorker reader)
        {
            // create the row data
            var row = new RowData
            {
                Columns = new List <Field>(),
                Nulls   = new List <bool>()
            };

            // get the column if the data has been read
            if (!reader.HasRows)
            {
                return(row);
            }

            for (var i = 0; i < reader.FieldCount; ++i)
            {
                var    isNull = reader.IsDBNull(i);
                var    type   = reader.GetFieldType(i);
                object value;
                if (isNull)
                {
                    if (type == typeof(string))
                    {
                        value = null;
                    }
                    else
                    {
                        value = Activator.CreateInstance(type);
                    }
                }
                else
                {
                    value = reader.GetValue(i);
                }
                row.Columns.Add(new Field(reader.GetName(i), type, value));
                row.Nulls.Add(isNull);
            }
            return(row);
        }