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;
}
}
}