Beispiel #1
0
        private object SelectValueInternal <T>(string query, IEnumerable <SQLiteQueryParameter> args, IRowMapper <T> rowMapper, object obj, SQLiteConnection connection)
        {
            using (SQLiteCommand command = connection.CreateCommand())
            {
                command.CommandText = query;

                PrepareCommandParameters(command, args);

                using (SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult))
                {
                    reader.Read();

                    if (reader.HasRows)
                    {
                        if (rowMapper != null)
                        {
                            obj = rowMapper.Map(reader);
                        }
                        else
                        {
                            // Used for primitive types
                            obj = reader[0];
                        }
                    }

                    reader.Close();
                }
            }

            return(obj);
        }
Beispiel #2
0
 public object Map(DbDataReader dataReader, object instance)
 {
     return(_rowMapper.Map(dataReader, new RowMapperContext()
     {
         Instance = instance,
         PocoData = _pocoData
     }));
 }
Beispiel #3
0
        private IEnumerable <T> SelectInternal <T>(string query, IEnumerable <QueryParameter> args, IRowMapper <T> rowMapper, SqlConnection connection, SqlTransaction transaction = null)
        {
            using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandText = query;

                if (transaction != null)
                {
                    command.Transaction = transaction;
                }

                PrepareCommandParameters(command, args);

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    var isNullable = Nullable.GetUnderlyingType(typeof(T)) != null;

                    while (reader.Read())
                    {
                        if (rowMapper != null)
                        {
                            yield return(rowMapper.Map(reader));
                        }
                        else
                        {
                            // Check for null values and return default instance of T (should be nullable)
                            // If not checked for NULL values, conversion will fail, resulting in InvalidCastException being thrown
                            if (isNullable && reader[0] == Convert.DBNull)
                            {
                                yield return(default(T));
                            }
                            else
                            {
                                yield return((T)reader[0]);
                            }
                        }
                    }

                    reader.Close();
                }
            }
        }