Exemplo n.º 1
0
        /**
         * keys=key1:1,2,3,4;key2:4,5,6,7
         * ... will become:
         * keys=[ { key1: 1, key2: 4}, { key1: 2, key2: 5 }, { key1: 2, key2: 6 }, { key1: 4, key2: 7 } ]
         */
        private static IEnumerable <Dto> GetKeyFromString(string keys)
        {
            var keyValueSet = new Dictionary <string, int[]>();
            var count       = 0;

            foreach (var item in keys.Split(new char[] { ';' }))
            {
                var keyValue = item.Split(new char[] { ':' });
                keyValueSet.Add(keyValue[0], keyValue[1].Split(new char[] { ',' }).Select((it) => Convert.ToInt32(it)).ToArray());
                if (count == 0)
                {
                    count = keyValueSet[keyValue[0]].Length;
                }
                else
                {
                    if (count != keyValueSet[keyValue[0]].Length)
                    {
                        throw new ArgumentException("parametru 'keys' incorect");
                    }
                }
            }

            var result = new List <Dto>();

            for (var i = 0; i < count; i++)
            {
                var resultItem = new Dto();
                foreach (var keyValue in keyValueSet)
                {
                    resultItem.Add(keyValue.Key, new JValue(keyValue.Value[i]));
                }
                result.Add(resultItem);
            }
            return(result);
        }
        public IEnumerable <Dto> ExecuteQuery(string queryText)
        {
            var dtos = new List <Dto>();

            switch (this.dialect)
            {
            case Dialect.SQL2012:
            case Dialect.SQL2014:
                // Not developed yet.
                throw new NotImplementedException();

            case Dialect.MYSQL:
                using (var sqlConnection = new MySqlConnection(this.connectionString))
                {
                    MySqlDataReader rdr = null;
                    try
                    {
                        sqlConnection.Open();
                        var cmd = new MySqlCommand(queryText, sqlConnection);
                        rdr = cmd.ExecuteReader();
                        while (rdr.Read())
                        {
                            //var row = Enumerable.Range(0, rdr.FieldCount).ToDictionary(rdr.GetName, rdr.GetValue);
                            //var row = Enumerable.Range(0, rdr.FieldCount).ToDictionary(i => rdr.GetName(i), i => rdr.GetValue(i));
                            var dto = new Dto();
                            for (int i = 0; i < rdr.FieldCount; i++)
                            {
                                //var dotNetType = rdr.GetFieldType(i);
                                //var sqlType = rdr.GetDataTypeName(i);
                                //var specificType = rdr.GetProviderSpecificFieldType(i);
                                dto.Add(rdr.GetName(i), new JValue(rdr.GetValue(i)));
                            }
                            dtos.Add(dto);
                        }
                    }
                    finally
                    {
                        if (rdr != null)
                        {
                            rdr.Close();
                        }

                        if (sqlConnection != null)
                        {
                            sqlConnection.Close();
                        }
                    }
                }
                break;

            default:
                break;
            }

            return(dtos);
        }