You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

288 lines
8.6 KiB

using SqlSugar;
using Tiobon.Core.Common.UserManager;
namespace Tiobon.Core.Common
{
/// <summary>
/// Sql插入类
/// </summary>
public class DbInsert
{
#region 变量定义
private string sql;
private string createProgram;
private long rowId;
/// <summary>
/// 如果使用线程,此处可以指定插入用户代码,否则CREATED_BY为空
/// </summary>
public string CreatedBy { get; set; }
public long RowId
{
get { return rowId; }
set { rowId = value; }
}
private bool isInitDefaultValue = true;
/// <summary>
/// 是否初始化默认字段,像:ROW_ID,CREATED_BY,CREATED_DATE,CREATED_PROGRAM,TAG,ACTIVE_FLAG等,默认会初始化
/// </summary>
public bool IsInitDefaultValue
{
get
{
return isInitDefaultValue;
}
set
{
isInitDefaultValue = value;
}
}
private bool isInitRowId = true;
/// <summary>
/// 是否初始化ROW_ID字段(默认初始化),只有IsInitDefaultValue为true时才有效!
/// </summary>
public bool IsInitRowId
{
get
{
return isInitRowId;
}
set
{
isInitRowId = value;
}
}
#endregion
#region 构造函数
public DbInsert()
{
}
public DbInsert(string tableName)
{
SetTableName(tableName.ToUpper());
}
public DbInsert(string tableName, string createProgram)
{
SetTableName(tableName.ToUpper());
this.createProgram = createProgram;
}
public void SetTableName(string tableName)
{
sql = "INSERT INTO {0} () VALUES ()";
sql = string.Format(sql, tableName.ToUpper());
}
#endregion
#region Values
public void Values(string fieldName, long value)
{
string s = "N'{0}'";
s = string.Format(s, value);
FormatValue(fieldName.ToUpper(), s);
}
public void Values(string fieldName, string value)
{
string s = "N'{0}'";
s = string.Format(s, value);
FormatValue(fieldName.ToUpper(), s);
}
public void Values(string fieldName, Guid value)
{
string value1 = value.ToString();
if (string.IsNullOrEmpty(value1)) return;
value1 = value1.Replace("'", "''");
value1 = value1.Trim();
string s = "N'{0}'";
s = string.Format(s, value1);
FormatValue(fieldName.ToUpper(), s);
}
public void Values(string fieldName, Guid? value)
{
string value1 = value.ToString();
if (string.IsNullOrEmpty(value1)) return;
value1 = value1.Replace("'", "''");
value1 = value1.Trim();
string s = "N'{0}'";
s = string.Format(s, value1);
FormatValue(fieldName.ToUpper(), s);
}
public void Values(string fieldName, int value)
{
FormatValue(fieldName.ToUpper(), Convert.ToString(value));
}
public void Values(string fieldName, double value)
{
FormatValue(fieldName.ToUpper(), Convert.ToString(value));
}
public void Values(string fieldName, decimal value)
{
FormatValue(fieldName.ToUpper(), Convert.ToString(value));
}
public void Values(string fieldName, decimal? value)
{
FormatValue(fieldName.ToUpper(), Convert.ToString(value));
}
public void Values(string fieldName, DateTime value)
{
if (value == DateTime.MinValue) return;
string valTemp = string.Empty;
valTemp = Convert.ToString(value);
//valTemp = valTemp.Replace("'", "''");
string s = string.Empty;
s = "CAST('{0}' AS DATETIME)";
s = string.Format(s, valTemp);
FormatValue(fieldName.ToUpper(), s);
}
public void Values(string fieldName, DateTime? value)
{
if (value == null) return;
string valTemp = string.Empty;
valTemp = Convert.ToString(value);
//valTemp = valTemp.Replace("'", "''");
string s = string.Empty;
s = "CAST('{0}' AS DATETIME)";
s = string.Format(s, valTemp);
FormatValue(fieldName.ToUpper(), s);
}
#endregion
#region 加密插入
/// <summary>
/// 以加密方式插入
/// </summary>
/// <param name="fieldName"></param>
/// <param name="value"></param>
public void ValuesAsSecurity(string fieldName, string value)
{
if (string.IsNullOrEmpty(value)) return;
value = value.Replace("'", "''");
string s = "encryptbykey(key_guid('fookey'),N'{0}')";
s = string.Format(s, value);
FormatValue(fieldName.ToUpper(), s);
}
/// <summary>
/// 加密保存
/// </summary>
/// <param name="fieldName"></param>
/// <param name="value"></param>
public void ValuesAsSecurity(string fieldName, int value)
{
ValuesAsSecurity(fieldName.ToUpper(), Convert.ToString(value));
}
/// <summary>
/// 加密保存
/// </summary>
/// <param name="fieldName"></param>
/// <param name="value"></param>
public void ValuesAsSecurity(string fieldName, double value)
{
ValuesAsSecurity(fieldName.ToUpper(), Convert.ToString(value));
}
/// <summary>
/// 加密保存
/// </summary>
/// <param name="fieldName"></param>
/// <param name="value"></param>
public void ValuesAsSecurity(string fieldName, decimal value)
{
ValuesAsSecurity(fieldName.ToUpper(), Convert.ToString(value));
}
#endregion
#region Public Method
public string GetSql()
{
if (isInitRowId == true)
{
rowId = SnowFlakeSingle.Instance.NextId();
Values("ID", rowId);
}
if (isInitDefaultValue == true)
InitDefaultValues();
return sql;
}
#endregion
#region Private Method
private void FormatValue(string fieldName, string value)
{
if (value != null)
{
value = value.Trim();
}
//if (DBHelper.MySql)
//{
// fieldName = fieldName.Replace("[", "`");
// fieldName = fieldName.Replace("]", "`");
//}
sql = sql.Replace("{", "{{");
sql = sql.Replace("}", "}}");
int n = sql.IndexOf("() VALUES");
if (n == -1)
{
n = sql.IndexOf(") VALUES");
sql = sql.Insert(n, ", {0} ");
n = sql.LastIndexOf(")");
sql = sql.Insert(n, ", {1}");
}
else
{
sql = sql.Insert(++n, " {0} ");
n = sql.LastIndexOf(")");
sql = sql.Insert(n, " {1}");
}
sql = string.Format(sql, fieldName.ToUpper(), value);
}
/// <summary>
/// 初始化Insert语句默认需要插入的值
/// </summary>
private void InitDefaultValues()
{
//DatabaseType dbType = DbAccess.GetDatabaseType();
//row_id
//if (DbAccess.IsOracle())
//{
// rowId = DbAccess.ExecuteScalar("SELECT F_GET_SYSID FROM DUAL") as string;
//}
//else
//{
// rowId = DbAccess.ExecuteScalar("SELECT REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-',''),' ',''),':','')") as string;
//}
//create_by
var createBy = UserContext.Current.User_Id;
Values("CreatedBy", createBy);
//create_date
DateTime createDate = DateTime.Now;
Values("CreatedTime", createDate);
//create_program
//Values("CREATED_PROGRAM", createProgram);
//tag
//Values("Tag", 1);
//active_flag
//Values("DELETE_FLAG", "N");
}
#endregion
}
}