using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace Lskj.Control.Model { public static class DatabaseFormatJudgment { /// /// 说明:保存和修改的验证 /// 创建人:曹屹峰 /// 创建日期:2021-9-13 /// 修改人: /// 修改日期: /// 修改备注: /// 数据库的表格属性表 /// 控件对象 /// 版本:1.0 /// public static string SaveOrModifyBalidation(DataTable TableProperties, ControlModel model, string fieldValue) { if (fieldValue==null) return ""; string SaveErrorMessage = string.Empty;//报错信息 string LengthPrompt = string.Empty;//长度提示 int MaxInputLength = 0; if (TableProperties.Rows.Count == 0) return ""; DataRow[] ListOfAttributes = TableProperties.Select("COLUMN_NAME='" + model.FieldName + "'"); if (ListOfAttributes.Length == 0) return ""; //判断长度 if (ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("varchar")) { if (int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) == -1) { ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] = 8000; } MaxInputLength = System.Text.Encoding.Default.GetBytes(fieldValue).Length; LengthPrompt = string.Format("该字段最长{0}个英文或数字,或{1}个汉字", ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + "", int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + "") / 2); } else if (ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("nvarchar")) { if (int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) == -1) { ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] = 4000; } MaxInputLength = fieldValue.Length; LengthPrompt = string.Format("该字段最长{0}个汉字(英文或数字)", ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + ""); } if (!string.IsNullOrWhiteSpace(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) && int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) < MaxInputLength) { SaveErrorMessage = model.LabelText + "~" + model.FieldName + ": 输入内容长度超出限制," + LengthPrompt + "\r\n"; } //判断属性是否正确 if ((ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("int") || ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("decimal")) &&!IsNumberic(fieldValue)) { if (model.IsEmpty) { SaveErrorMessage = SaveErrorMessage + model.LabelText + "~" + model.FieldName + ": 数据格式错误;\r\n"; } else { model.Isintordecimal = true; //输入值不为数值 if (!string.IsNullOrEmpty(fieldValue)) { SaveErrorMessage = SaveErrorMessage + model.LabelText + "~" + model.FieldName + ": 数据格式错误;\r\n"; } } } return SaveErrorMessage; } /// /// 说明:保存和修改的验证 /// 创建人:曹屹峰 /// 创建日期:2021-9-13 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// 明细列或表格列 /// 数据库的表格属性表 /// 修改或保存行 /// 修改或保存列 /// 修改或保存值 /// public static string SaveOrModifyBalidation(DataTable _detailColumns, DataTable TableProperties, DataRow row, DataColumn col, string fieldValue) { if (fieldValue == null) return ""; if (!row.Table.Columns.Contains(col.ColumnName)) return ""; if (TableProperties.Rows.Count == 0) return ""; DataRow hasContainRow = _detailColumns.Rows.Cast().FirstOrDefault(x => (x["fieldname"] + "").ToLower() == col.ColumnName.ToLower()); if (hasContainRow == null) return ""; DataRow[] ListOfAttributes = TableProperties.Select("COLUMN_NAME='" + col.ColumnName + "'"); if (ListOfAttributes == null || ListOfAttributes.Length == 0) return ""; string saveErrorMessage = string.Empty;//报错信息 string LengthPrompt = string.Empty;//长度提示 int MaxInputLength = 0; //判断长度是否超出 if (ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("varchar")) { if (int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) == -1) { ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] = 8000; } MaxInputLength = System.Text.Encoding.Default.GetBytes((row[col.ColumnName] + "").Replace("'", "''")).Length; LengthPrompt = string.Format("该字段最长{0}个英文或数字,或{1}个汉字", ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + "", int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + "") / 2); } else if (ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("nvarchar")) { if (int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) == -1) { ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] = 4000; } MaxInputLength = (row[col.ColumnName] + "").Replace("'", "''").Length; LengthPrompt = string.Format("该字段最长{0}个汉字(英文或数字)", ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + ""); } if (!string.IsNullOrWhiteSpace(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) && int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) < MaxInputLength) { saveErrorMessage = saveErrorMessage + hasContainRow["username"].ToString() + "~" + col.ColumnName + ": 输入内容长度超出限制,"+ LengthPrompt + "\r\n"; } //判断属性是否正确 if ((ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("int") || ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("decimal")) && !IsNumberic((row[col.ColumnName] + "").Replace("'", "''")) && !string.IsNullOrWhiteSpace((row[col.ColumnName] + ""))) { saveErrorMessage = saveErrorMessage + hasContainRow["username"].ToString() + "~" + col.ColumnName + ": 数据格式错误,请输入数值;\r\n"; } return saveErrorMessage; } /// /// 说明:保存和修改的验证 /// 创建人:曹屹峰 /// 创建日期:2021-9-13 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public static string SaveOrModifyBalidation(DataTable TableProperties, DataRow row, DataColumn col, string fieldValue) { if (!row.Table.Columns.Contains(col.ColumnName) || row == null) return ""; if (TableProperties.Rows.Count == 0) return ""; DataRow[] ListOfAttributes = TableProperties.Select("COLUMN_NAME='" + col.ColumnName + "'"); if (ListOfAttributes == null || ListOfAttributes.Length == 0) { return ""; } string saveErrorMessage = string.Empty;//报错信息 string LengthPrompt = string.Empty;//长度提示 int MaxInputLength = 0; //判断长度是否超出 if (ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("varchar")) { if (int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) == -1) { ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] = 8000; } MaxInputLength = System.Text.Encoding.Default.GetBytes((row[col.ColumnName] + "").Replace("'", "''")).Length; LengthPrompt = string.Format("该字段最长{0}个英文或数字,或{1}个汉字", ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + "", int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + "") / 2); } else if (ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("nvarchar")) { if (int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) == -1) { ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] = 4000; } MaxInputLength = (row[col.ColumnName] + "").Replace("'", "''").Length; LengthPrompt = string.Format("该字段最长{0}个汉字(英文或数字)", ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] + ""); } if (!string.IsNullOrWhiteSpace(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) && int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) < MaxInputLength) { saveErrorMessage = saveErrorMessage + col.ColumnName + ": 输入内容长度超出限制," + LengthPrompt + "\r\n"; } //判断属性是否正确 if ((ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("int") || ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("decimal")) && !IsNumberic((row[col.ColumnName] + "").Replace("'", "''")) && !string.IsNullOrWhiteSpace((row[col.ColumnName] + ""))) { saveErrorMessage = saveErrorMessage + "~" + col.ColumnName + ": 数据格式错误,请输入数值;\r\n"; } return saveErrorMessage; } /// /// 判断输入的字符串是否可以转换成数值类型 /// /// /// public static bool IsNumberic(string str) { double vsNum; bool isNum; isNum = double.TryParse(str, System.Globalization.NumberStyles.Float, System.Globalization.NumberFormatInfo.InvariantInfo, out vsNum); if (string.IsNullOrWhiteSpace(str)) isNum = false; return isNum; } } }