Пример #1
0
        private static void AddSqlParameter(StringBuilder sqlColumns, List <object> sqlParameters, TableInfo tableInfo, string columnName, object value)
        {
            var paramName = $"@param_{sqlParameters.Count}";

            if (columnName != null && tableInfo.ConvertibleColumnConverterDict.TryGetValue(columnName, out var valueConverter))
            {
                value = valueConverter.ConvertToProvider.Invoke(value);
            }

            // will rely on SqlClientHelper.CorrectParameterType to fix the type before executing
            var sqlParameter = TryCreateRelationalMappingParameter(columnName, paramName, value, tableInfo);

            if (sqlParameter == null)
            {
                sqlParameter = new Microsoft.Data.SqlClient.SqlParameter(paramName, value ?? DBNull.Value);
                var columnType = tableInfo.ColumnNamesTypesDict[columnName];
                if (value == null && columnType.Contains(DbType.Binary.ToString(), StringComparison.OrdinalIgnoreCase)) //"varbinary(max)".Contains("binary")
                {
                    sqlParameter.DbType = DbType.Binary;                                                                // fix for ByteArray since implicit conversion nvarchar to varbinary(max) is not allowed
                }
            }

            sqlParameters.Add(sqlParameter);
            sqlColumns.Append($" {paramName}");
        }
Пример #2
0
        public static IEnumerable <SysUserTableRight> getUserTableRigth(DbContext dbContext, Guid userid)
        {
            var useridParameter = new Microsoft.Data.SqlClient.SqlParameter("@userid", userid);
            var userTableRights = dbContext.Database.SqlQueryDataTable <SysUserTableRight>($"exec [dbo].[usp_right_UserTableName] @userid ", useridParameter);

            return(userTableRights);
        }
Пример #3
0
        public static IEnumerable <IgnorePatternList> getUserIgnorePatternList(DbContext dbContext, Guid userid)
        {
            var useridParameter = new Microsoft.Data.SqlClient.SqlParameter("@userid", userid);
            var UserIPWhiteList = dbContext.Database.SqlQueryDataTable <IgnorePatternList>($"SELECT a.[IgnorePatternListId],a.[PatternList],[SysUserId] FROM [IgnorePatternList] a with(nolock) where a.SysUserId is null or a.SysUserId=@userid", useridParameter);

            return(UserIPWhiteList);
        }
Пример #4
0
        public static IEnumerable <SysUserRolePrivilegeActionView> getUserActionList(DbContext dbContext, Guid userid)
        {
            var useridParameter = new Microsoft.Data.SqlClient.SqlParameter("@userid", userid);
            var userActions     = dbContext.Database.SqlQueryDataTable <SysUserRolePrivilegeActionView>($"select distinct a.SysUserId,a.SysActionName from SysUserRolePrivilegeActionView a where a.SysUserId=@userid", useridParameter);

            return(userActions);
        }
Пример #5
0
        public static IEnumerable <IpNameRef> getIpNameRef(DbContext dbContext, long ipValue)
        {
            var ipParameter   = new Microsoft.Data.SqlClient.SqlParameter("@ip", ipValue);
            var ipNameRefList = dbContext.Database.SqlQueryDataTable <IpNameRef>($"SELECT  [IpNameRefId],[Country],[Local] FROM [ZMDB].[dbo].[IpNameRef] a with(nolock) where a.StartIPValue<=@ip and a.EndIPValue>=@ip", ipParameter);

            return(ipNameRefList);
        }
Пример #6
0
 public string Get(int id)
 {
     using (CourseProjectContext dbContext = new CourseProjectContext())
     {
         Microsoft.Data.SqlClient.SqlParameter param = new Microsoft.Data.SqlClient.SqlParameter("@id", id);
         var events = dbContext.Events.FromSqlRaw("getevents @id", param).ToList();
         return(JsonConvert.SerializeObject(events));
     }
 }
 public void Delete(int id)
 {
     try
     {
         Microsoft.Data.SqlClient.SqlParameter param = new Microsoft.Data.SqlClient.SqlParameter("@eid", id);
         dbContext.Events.FromSqlRaw("delmembers @eid", param).ToList();
     }
     catch (Exception e)
     {
     }
 }
        public string Get(int id)
        {
            using (CourseProjectContext dbContext = new CourseProjectContext())
            {
                Microsoft.Data.SqlClient.SqlParameter param = new Microsoft.Data.SqlClient.SqlParameter("@id", id);
                var events = dbContext.Events.FromSqlRaw("getsignupevents @id", param).ToList();
                return(JsonConvert.SerializeObject(events));
            }

            //return JsonConvert.SerializeObject(dbContext.Set<Users>().Where(b => b.Login.Contains(value)));
        }
        public string ExportRecords()
        {
            Microsoft.Data.SqlClient.SqlParameter Param1 = new Microsoft.Data.SqlClient.SqlParameter();
            Param1.ParameterName = "@result";
            Param1.SqlDbType     = SqlDbType.NVarChar;
            Param1.Size          = 2048;
            Param1.Direction     = ParameterDirection.Output;
            Param1.Value         = -1;
            var    sprocResponse = _db.Database.ExecuteSqlCommand("[dbo].[ExportRecordFromJSonTables]  @result = @result OUTPUT", new object[] { Param1 });
            string outPutVal     = Param1.Value.ToString();

            return(outPutVal);
        }
Пример #10
0
        /* TODO 1.1: Примеры выполнения SQL-запросов
         * Все примеры работоспособны, можете раскомментировать и выполнять их по очереди
         */

        public void Task11(string param1, string param2)
        {
            /* Пример 1.0
             * Простой запрос с возвратом объектов сущностного класса Students
             * Раскомментируйте строку ниже, запустите программу и нажмите на форме первую кнопку "Вызвать пример!"
             */
            //form1.dataGridView11.DataSource = context.Students.FromSqlRaw("SELECT * FROM STUDENTS").ToList();

            /* Пример 1.1
             * Запрос с возвратом не-сущностных объектов
             * Прежде чем выполнять запрос, найдите в списке задач (View \ Task List)
             * задачи TODO 1.1a и 1.1b (они в других файлах)
             */
            /* TODO 1.1c: После выполнения задач TODO 1.1a и 1.1b, раскомментируйте строку кода ниже
             */
            //form1.dataGridView11.DataSource = context.Example12_Res.FromSqlRaw("SELECT Name, Surname FROM STUDENTS").ToList();

            /* Пример 1.2
             * Вызов функции Inline_F01
             * Откройте эту функцию в БД или в обозревателе серверов
             * Для этого раскройте БД STUD_20 и найдите в ней Functions или Programmability \ Functions
             * Изучите входные параметры и структуру выходного набора
             * Для возврата данных создан класс Lab_sp.Models.Inline_F01_Res,
             * по аналогии с тем, как это сделано в предыдущем примере
             * Значения param1 и param1 устаналиваются на форме Form1
             */

            // Передача параметров путём форматирования строки
            //form1.dataGridView11.DataSource = context.Inline_F01_Res.FromSqlRaw("SELECT * FROM dbo.Inline_Function_N01 ({0}, {1})", param1, param2).ToList();

            // Передача параметров через интерполированную строку $""
            //form1.dataGridView11.DataSource = context.Inline_F01_Res.FromSqlInterpolated($"SELECT * FROM dbo.Inline_Function_N01 ({param1}, {param2})").ToList();

            /* Пример 1.3
             * Создание параметризованного запроса для вызова функции
             * Параметры @group и @absences тспользуются для передачи значений param1 и param1
             * Обратите внимание на преобразование типа параметра param2
             */

            var par_group    = new Microsoft.Data.SqlClient.SqlParameter("@group", param1);
            var par_absences = new Microsoft.Data.SqlClient.SqlParameter("@absences", int.Parse(param2));
            // интерполяция
            //form1.dataGridView11.DataSource = context.Inline_F01_Res.FromSqlInterpolated($"SELECT * FROM dbo.Inline_Function_N01 ({par_group}, {par_absences})").ToList();
            // или форматирование
            //form1.dataGridView11.DataSource = context.Inline_F01_Res.FromSqlRaw($"SELECT * FROM dbo.Inline_Function_N01 (@group, @absences)", par_group, par_absences).ToList();


            /* Больше примеров:
             * https://www.learnentityframeworkcore.com/raw-sql
             */
        }
Пример #11
0
        public IActionResult Create(Category create_categories)
        {
            //добавление через хранимую процедуру
            var param = new Microsoft.Data.SqlClient.SqlParameter("@name", create_categories.CategoryName);

            db.Database.ExecuteSqlRaw("dbo.CategoriesAdd @name", param);

            //добавляем данные в БД
            //*сохраняем данные через EF
            //db.Categories.Add(create_categories);
            //db.SaveChanges();

            //возвращаем категории
            return(RedirectToAction("Index"));
        }
 public void Delete(int id, int id2)
 {
     using (CourseProjectContext dbContext = new CourseProjectContext())
     {
         try
         {
             Microsoft.Data.SqlClient.SqlParameter param  = new Microsoft.Data.SqlClient.SqlParameter("@eid", id);
             Microsoft.Data.SqlClient.SqlParameter param2 = new Microsoft.Data.SqlClient.SqlParameter("@uid", id2);
             dbContext.Events.FromSqlRaw("delmember @eid, @uid", param, param2).ToList();
         }
         catch (Exception e)
         {
         }
     }
 }
Пример #13
0
        internal override void InitializeParameter(ProviderType type, DbParameter parameter, object value)
        {
            SqlType sqlType = (SqlType)type;

            if (sqlType.IsRuntimeOnlyType)
            {
                throw Error.BadParameterType(sqlType.GetClosestRuntimeType());
            }
            Microsoft.Data.SqlClient.SqlParameter sParameter = parameter as Microsoft.Data.SqlClient.SqlParameter;
            if (sParameter != null)
            {
                sParameter.SqlDbType = sqlType.SqlDbType;
                if (sqlType.HasPrecisionAndScale)
                {
                    sParameter.Precision = (byte)sqlType.Precision;
                    sParameter.Scale     = (byte)sqlType.Scale;
                }
            }
            else
            {
                PropertyInfo piSqlDbType = parameter.GetType().GetProperty("SqlDbType");
                if (piSqlDbType != null)
                {
                    piSqlDbType.SetValue(parameter, sqlType.SqlDbType, null);
                }
                if (sqlType.HasPrecisionAndScale)
                {
                    PropertyInfo piPrecision = parameter.GetType().GetProperty("Precision");
                    if (piPrecision != null)
                    {
                        piPrecision.SetValue(parameter, Convert.ChangeType(sqlType.Precision, piPrecision.PropertyType, CultureInfo.InvariantCulture), null);
                    }
                    PropertyInfo piScale = parameter.GetType().GetProperty("Scale");
                    if (piScale != null)
                    {
                        piScale.SetValue(parameter, Convert.ChangeType(sqlType.Scale, piScale.PropertyType, CultureInfo.InvariantCulture), null);
                    }
                }
            }
            parameter.Value = GetParameterValue(sqlType, value);

            int?determinedSize = DetermineParameterSize(sqlType, parameter);

            if (determinedSize.HasValue)
            {
                parameter.Size = determinedSize.Value;
            }
        }
        private void CallFunctionsBySQL(string name)
        {
            SqlParam paramName = new SqlParam("@name", name);

            var categoryRows = _db.Category.FromSqlRaw("select * FROM dbo.CategoryRowsFunc(@name)", paramName);

            var countData = 2;

            SqlParam paramCount = new SqlParam("@count", countData);

            //var countNewAutogeneratedStrings = _db.Product.FromSqlRaw("CreateMoreData @count", paramCount).ToList();

            foreach (var row in categoryRows)
            {
                Console.WriteLine($"{row.Id}, {row.Name}, {row.DisplayOrder}");
            }
        }
Пример #15
0
        //public virtual IQueryable<Customer> UspGetAllCustomers() =>
        //    FromExpression(() => UspGetAllCustomers());

        public virtual void UspSetOrderStatus(Order.OrderStatus oldOrderStatus, Order.OrderStatus newOrderStatus)
        {
            var oldOrderStatusParam = new Microsoft.Data.SqlClient.SqlParameter()
            {
                ParameterName = "@oldOrderStatus",
                SqlDbType     = System.Data.SqlDbType.Int,
                SqlValue      = (int)oldOrderStatus
            };
            var newOrderStatusParam = new Microsoft.Data.SqlClient.SqlParameter()
            {
                ParameterName = "@newOrderStatus",
                SqlDbType     = System.Data.SqlDbType.Int,
                SqlValue      = (int)newOrderStatus
            };

            Database.ExecuteSqlRaw("EXEC uspSetOrderStatus @oldOrderStatus, @newOrderStatus", oldOrderStatusParam, newOrderStatusParam);
        }
Пример #16
0
        public IActionResult Edit(Category edit_categories)
        {
            //добавляем данные в БД
            //db.CatalogProds.Add(catalogProd);
            //сохраняем данные
            //db.Categories.Update(edit_categories);
            //db.SaveChanges();

            //через хранимую процедуру
            object[] param = new object[2];
            param[0] = new Microsoft.Data.SqlClient.SqlParameter("@name", edit_categories.CategoryName);
            param[1] = new Microsoft.Data.SqlClient.SqlParameter("@id", edit_categories.Id);

            //возвращаем сообщение
            //return ($"Изменения {edit_categories.CategoryName} сохранены!");
            db.Database.ExecuteSqlRaw("dbo.CategoriesEdit @name, @id", param);
            return(RedirectToAction("Index"));
        }
Пример #17
0
        public RawSqlCommand AddParameter(string name, object value)
        {
            var p = new Microsoft.Data.SqlClient.SqlParameter(name, value ?? DBNull.Value);

            if (value != null)
            {
                p.SqlDbType = MicroORM.Core.SqlCommandBuilder.GetSqlFieldType(value.GetType());

                if (p.SqlDbType == System.Data.SqlDbType.Char)
                {
                    p.Size = Math.Max(1, Math.Min(6000, ((int?)value.ToString()?.Length) ?? 1));
                }
            }

            _parameters.Add(p);

            return(this);
        }
Пример #18
0
        public IActionResult ViewAdd(string id)
        {
            Guid    user_id  = Guid.Parse(HttpContext.User.Identity.Name);
            Guid    post_id  = Guid.Parse(id);
            Дествие просмотр = _context.Дествие.Where(t => t.ID_Пользователя == user_id && t.ID_Записи == post_id).ToList().FirstOrDefault(t => t.Код == 2);
            int     count    = -1;

            if (просмотр == null)
            {
                var id_user_param = new Microsoft.Data.SqlClient.SqlParameter("@id_user", user_id);
                var id_post_param = new Microsoft.Data.SqlClient.SqlParameter("@id_post", post_id);
                _context.Database.ExecuteSqlRaw("AddView @id_user, @id_post", new Microsoft.Data.SqlClient.SqlParameter[] { id_user_param, id_post_param });
                _context.SaveChanges();
            }
            count = _context.Дествие.Where(t => t.ID_Записи == post_id && t.Код == 2).ToList().Count();
            return(Json(new
            {
                count = count
            }));
        }
Пример #19
0
        public Tuple <string, decimal, decimal, decimal, decimal> GetExpenseStatistical(DateTime formDate, DateTime toDate)
        {
            var fromDateParam = new Microsoft.Data.SqlClient.SqlParameter("@p0", formDate);

            fromDateParam.DbType = System.Data.DbType.DateTime2;

            var toDateParam = new Microsoft.Data.SqlClient.SqlParameter("@p1", toDate);

            toDateParam.DbType = System.Data.DbType.DateTime2;

            var datas = _unitOfWorfkMedia.GetDynamicResult("sp_ExpenseStatistical @p0, @p1", fromDateParam, toDateParam);
            var data  = datas.FirstOrDefault();

            return(new Tuple <string, decimal, decimal, decimal, decimal>(
                       data.ExpenseMaxName.Equals(DBNull.Value) ? "": data.ExpenseMaxName,
                       data.ExpenseMaxMoney.Equals(DBNull.Value) ? 0 : data.ExpenseMaxMoney,
                       data.Money_Total.Equals(DBNull.Value) ? 0 : data.Money_Total,
                       data.Money_VK.Equals(DBNull.Value) ? 0 : data.Money_VK,
                       data.Money_CK.Equals(DBNull.Value) ? 0 : data.Money_CK
                       ));
        }
Пример #20
0
        public IActionResult Create(CatalogProd create_prods)
        {
            if (ModelState.IsValid)
            {
                //добавляем данные в БД
                //db.CatalogProds.Add(create_prods);
                //db.SaveChanges();

                //через хранимую процедуру
                Microsoft.Data.SqlClient.SqlParameter[] param = new Microsoft.Data.SqlClient.SqlParameter[6];
                param[0] = new Microsoft.Data.SqlClient.SqlParameter("@idCategory", create_prods.IdCategory);
                param[1] = new Microsoft.Data.SqlClient.SqlParameter("@prodName", create_prods.ProdName);
                param[2] = new Microsoft.Data.SqlClient.SqlParameter("@description", create_prods.DescriptionProd);
                param[3] = new Microsoft.Data.SqlClient.SqlParameter("@price", create_prods.Price);
                param[4] = new Microsoft.Data.SqlClient.SqlParameter("@remark", create_prods.Remark);
                if (param[4].Value == null)
                {
                    param[4].Value = DBNull.Value;
                }
                param[5] = new Microsoft.Data.SqlClient.SqlParameter("@specialRemark", create_prods.SpecialRemark);
                if (param[5].Value == null)
                {
                    param[5].Value = DBNull.Value;
                }

                //возвращаем сообщение
                //return ($"Изменения {edit_categories.CategoryName} сохранены!");
                db.Database.ExecuteSqlRaw("dbo.CatalogProdsAdd @idCategory, @prodName, @description, @price, @remark, @specialRemark", param);

                //возвращаем каталог
                return(RedirectToAction("Index"));
            }
            // строчечка, которая позволяет увидеть ошибки валидации, если она не проходит (надо только на следующую точку останова поставить и watch-ить)
            //var errors = ModelState.Values.SelectMany(v => v.Errors);
            SelectList categories = new SelectList(db.Categories, "Id", "CategoryName");

            ViewBag.CategoryProd = categories;
            return(View("Create"));
        }
        public string Post([FromBody] Reservations value)
        {
            using (TravelHelperContext dbContext = new TravelHelperContext())
            {
                Microsoft.Data.SqlClient.SqlParameter roomIdParam    = new Microsoft.Data.SqlClient.SqlParameter("@roomId", value.RoomId);
                Microsoft.Data.SqlClient.SqlParameter startDateParam = new Microsoft.Data.SqlClient.SqlParameter("@startDate", value.StartDate);
                Microsoft.Data.SqlClient.SqlParameter endDateParam   = new Microsoft.Data.SqlClient.SqlParameter("@endDate", value.EndDate);

                int activeReservationsCount = dbContext.Reservations.FromSqlRaw("GetActiveReservationsByDates {0}, {1}, {2}", roomIdParam, startDateParam, endDateParam).ToList().Count();

                int count = dbContext.Rooms.Where(room => room.Id.Equals(value.RoomId)).FirstOrDefault().Count;

                if (activeReservationsCount >= count)
                {
                    return("Too much reservations");
                }
                else
                {
                    return("Ok");
                }
            }
        }
Пример #22
0
        public void Task21(string param1, string param2, string param3)
        {
            try
            {
                var par_output = new Microsoft.Data.SqlClient.SqlParameter("@outparam", System.Data.SqlDbType.Int);
                par_output.Direction = System.Data.ParameterDirection.Output;

                // интерполяция строк
                context.Database.ExecuteSqlInterpolated($"EXEC StoredProc_N0100 {param1}, {param2}, {param3}, {par_output} OUT");

                // то же самое через форматирование
                //context.Database.ExecuteSqlRaw("EXEC StoredProc_N0100 {0}, {1}, {2}, @outparam OUT", param1, param2, param3, par_output);

                // обновление данных на форме
                // раскомментируйте строку ниже

                //form1.Test_dataGridView.DataSource = context.TestTable.ToList();
                OutValue21 = (int)par_output.Value;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message + "\n\n" + (e.InnerException != null ? e.InnerException.Message : ""));
            }
        }
Пример #23
0
        public ICollection <ProductReviewDto> GetProductReview(DateTime fromDate, DateTime toDate)
        {
            var results       = new List <ProductReviewDto>();
            var fromDateParam = new Microsoft.Data.SqlClient.SqlParameter("@p0", fromDate);

            fromDateParam.DbType = System.Data.DbType.DateTime2;

            var toDateParam = new Microsoft.Data.SqlClient.SqlParameter("@p1", toDate);

            toDateParam.DbType = System.Data.DbType.DateTime2;

            var datas = _unitOfWorfk.GetDynamicResult("sp_mnshop_getproductreview @p0, @p1", fromDateParam, toDateParam);

            foreach (var item in datas)
            {
                results.Add(new ProductReviewDto()
                {
                    ProductName = item.ProductName,
                    Count       = item.Count
                });
            }

            return(results);
        }
Пример #24
0
        public async Task <IActionResult> RegUsers([Required(ErrorMessage = "Не указан логин")]
                                                   string Login
                                                   , [Required(ErrorMessage = "Не указана фамилия")]
                                                   string LastName
                                                   , [Required(ErrorMessage = "Не указано имя")]
                                                   string FirstName
                                                   , [Required(ErrorMessage = "Не указан пароль")]
                                                   [DataType(DataType.Password)]
                                                   string Pass
                                                   , [Required(ErrorMessage = "Не указан пол")]
                                                   string Gender
                                                   , [Required(ErrorMessage = "Не указан email")]
                                                   string Email
                                                   , [Required(ErrorMessage = "Не указана дата рождения")]
                                                   string DateOfBirth
                                                   , [Required(ErrorMessage = "Не указан часовой пояс")]
                                                   string Timezone
                                                   , [Required(ErrorMessage = "Не указана Страна")]
                                                   string Country
                                                   , [Required(ErrorMessage = "Не указан город")]
                                                   string City
                                                   , [Required(ErrorMessage = "Не указан адрес")]
                                                   string Address
                                                   , Byte Status       = 1
                                                   , string Patronymic = ""
                                                   , Int64 Phone       = 0)
        {
            var param = new Microsoft.Data.SqlClient.SqlParameter[]
            {
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Login",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 30,
                    Value         = Login
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Status",
                    SqlDbType     = System.Data.SqlDbType.TinyInt,
                    Value         = Status
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_LastName",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 32,
                    Value         = LastName
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_FirstName",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 32,
                    Value         = FirstName
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Patronymic",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 32,
                    Value         = Patronymic
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Pass",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 16,
                    Value         = Pass
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Gender",
                    SqlDbType     = System.Data.SqlDbType.NChar,
                    Size          = 4,
                    Value         = Gender
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Email",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 128,
                    Value         = Email
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Phone",
                    SqlDbType     = System.Data.SqlDbType.BigInt,
                    Value         = Phone
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_DateOfBirth",
                    SqlDbType     = System.Data.SqlDbType.Date,
                    Value         = DateOfBirth
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_DateOfCreation",
                    SqlDbType     = System.Data.SqlDbType.DateTime2,
                    Value         = DateTime.Now
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_DateOfChange",
                    SqlDbType     = System.Data.SqlDbType.DateTime2,
                    Value         = DateTime.Now
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Timezone",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 60,
                    Value         = Timezone
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Country",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 60,
                    Value         = Country
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_City",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 60,
                    Value         = City
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_Address",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Size          = 512,
                    Value         = Address
                },
                new Microsoft.Data.SqlClient.SqlParameter
                {
                    ParameterName = "@_result",
                    SqlDbType     = System.Data.SqlDbType.NVarChar,
                    Direction     = System.Data.ParameterDirection.Output,
                    Size          = 256
                }
            };

            List <InfoReg> infoReg = await db.Info_Reg.FromSqlRaw(@$ "[dbo].[Set_AddUser] @Login          = @_Login
                                                                                       ,@Status         = @_Status
                                                                                       ,@LastName       = @_LastName
                                                                                       ,@FirstName      = @_FirstName
                                                                                       ,@Patronymic     = @_Patronymic
                                                                                       ,@PASS           = @_Pass
                                                                                       ,@Gender         = @_Gender
                                                                                       ,@Email          = @_Email
                                                                                       ,@Phone          = @_Phone
                                                                                       ,@DateOfBirth    = @_DateOfBirth
                                                                                       ,@DateOfCreation = @_DateOfCreation
                                                                                       ,@DateOfChange   = @_DateOfChange
                                                                                       ,@Timezone       = @_Timezone
                                                                                       ,@Country        = @_Country
                                                                                       ,@City           = @_City
                                                                                       ,@Address        = @_Address
                                                                                       ,@result         = @_result output;'", param).ToListAsync();

            if (infoReg.Count >= 0)
            {
                //await Authenticate(infoAuth[0]); // аутентификация

                if (HttpContext.User.Identity.IsAuthenticated)
                {
                    return(Redirect($"auth?Login={Login}&Pass={Pass}"));
                }
            }

            // если пользователя не найдено
            return(NotFound());
        }
Пример #25
0
        private static string GetSqlSetSegment(DbContext context, TableInfo tableInfo, Type updateValuesType, object updateValues, object defaultValues, List <string> updateColumns, List <object> parameters)
        {
            string sql = string.Empty;

            foreach (var propertyNameColumnName in tableInfo.PropertyColumnNamesDict)
            {
                string       propertyName = propertyNameColumnName.Key;
                string       columnName   = propertyNameColumnName.Value;
                var          pArray       = propertyName.Split(new char[] { '.' });
                Type         lastType     = updateValuesType;
                PropertyInfo property     = lastType.GetProperty(pArray[0]);
                if (property != null)
                {
                    object propertyUpdateValue  = property.GetValue(updateValues);
                    object propertyDefaultValue = property.GetValue(defaultValues);
                    for (int i = 1; i < pArray.Length; i++)
                    {
                        lastType            = property.PropertyType;
                        property            = lastType.GetProperty(pArray[i]);
                        propertyUpdateValue = propertyUpdateValue != null?property.GetValue(propertyUpdateValue) : propertyUpdateValue;

                        var lastDefaultValues = lastType.Assembly.CreateInstance(lastType.FullName);
                        propertyDefaultValue = property.GetValue(lastDefaultValues);
                    }

                    if (tableInfo.ConvertibleColumnConverterDict.ContainsKey(columnName))
                    {
                        bool isEnum = tableInfo.ColumnToPropertyDictionary[columnName].ClrType.IsEnum;
                        if (!isEnum) // Omit from ConvertibleColumns because there Enum of byte type gets converter to Number which is then different from default enum value // Test: RunBatchUpdateEnum
                        {
                            propertyUpdateValue  = tableInfo.ConvertibleColumnConverterDict[columnName].ConvertToProvider.Invoke(propertyUpdateValue);
                            propertyDefaultValue = tableInfo.ConvertibleColumnConverterDict[columnName].ConvertToProvider.Invoke(propertyDefaultValue);
                        }
                    }

                    bool isDifferentFromDefault = propertyUpdateValue != null && propertyUpdateValue?.ToString() != propertyDefaultValue?.ToString();
                    bool updateColumnExplicit   = updateColumns != null && updateColumns.Contains(propertyName);
                    if (isDifferentFromDefault || updateColumnExplicit)
                    {
                        sql += $"[{columnName}] = @{columnName}, ";
                        var parameterName      = $"@{columnName}";
                        IDbDataParameter param = TryCreateRelationalMappingParameter(columnName, parameterName, propertyUpdateValue, tableInfo);
                        if (param == null)
                        {
                            propertyUpdateValue ??= DBNull.Value;
                            param = new Microsoft.Data.SqlClient.SqlParameter();
                            param.ParameterName = $"@{columnName}";
                            param.Value         = propertyUpdateValue;
                            if (!isDifferentFromDefault && propertyUpdateValue == DBNull.Value && property.PropertyType == typeof(byte[])) // needed only when having complex type property to be updated to default 'null'
                            {
                                param.DbType = DbType.Binary;                                                                              // fix for ByteArray since implicit conversion nvarchar to varbinary(max) is not allowed
                            }
                        }

                        parameters.Add(param);
                    }
                }
            }
            if (string.IsNullOrEmpty(sql))
            {
                throw new InvalidOperationException("SET Columns not defined. If one or more columns should be updated to theirs default value use 'updateColumns' argument.");
            }
            sql = sql.Remove(sql.Length - 2, 2); // removes last excess comma and space: ", "
            return($"SET {sql}");
        }