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}"); }
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); }
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); }
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); }
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); }
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); }
/* 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 */ }
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) { } } }
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}"); } }
//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); }
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")); }
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); }
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 })); }
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 )); }
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"); } } }
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 : "")); } }
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); }
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()); }
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}"); }