RaUI/Source/MyDb/MyDb/ryQuickSQL.cs
鑫Intel bfb3e7a2b3 ### 2022-03-11更新
------
#### MyDbV4    V3.0.2203.1101
- *.[改进]ryQuickSQL中的int和long类型直接转变为数值,而不是参数变量。
- *.[修复]ryQuickSQL中的GetUpdateSQL函数会将《计算参数》进行更新的BUG。
2022-03-11 11:14:16 +08:00

370 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
namespace ryCommonDb
{
/// <summary>
/// SQL字段类型
/// </summary>
public class SQLIitem
{
/// <summary>
/// SQL字段类型
/// </summary>
/// <param name="_field"></param>
/// <param name="_value"></param>
public SQLIitem(string _field,object _value)
{
Field = _field;
value = _value;
len = 0;
}
/// <summary>
/// SQL字段类型
/// </summary>
/// <param name="_field"></param>
/// <param name="_value"></param>
/// <param name="_len"></param>
public SQLIitem(string _field, object _value,int _len)
{
Field = _field;
value = _value;
len = _len;
}
/// <summary>
/// SQL字段名
/// </summary>
public string Field = "";
/// <summary>
/// SQL字段值
/// </summary>
public object value;
/// <summary>
/// SQL字段长度
/// </summary>
public int len = 0;
/// <summary>
/// 不是真的值,而是用于计算的值
/// </summary>
public bool isNoValue = false;
}
/// <summary>
/// SQL快速操作类
/// </summary>
public class RyQuickSQL
{
/// <summary>
/// SQL快速操作类
/// </summary>
/// <param name="_tableName"></param>
public RyQuickSQL(string _tableName)
{ TableName = _tableName; }
/// <summary>
/// 表名
/// </summary>
public string TableName{get;set;}
/// <summary>
/// 操作字段列表
/// </summary>
public List<SQLIitem> List { get; } = new List<SQLIitem>();
/// <summary>
/// 清理使用资源
/// </summary>
public void Free()
{
Clear();
}
/// <summary>
/// 清理使用资源
/// </summary>
public void Dispose()
{
Free();
}
/// <summary>
/// 清理使用资源
/// </summary>
~RyQuickSQL()
{
Free();
}
/// <summary>
/// 操作参数列表
/// </summary>
public List<SQLIitem> List_param { get; } = new List<SQLIitem>();
/// <summary>
/// 操作参数列表
/// </summary>
private List<string> List_Nullparam { get; } = new List<string>();
private void ListAdd(SQLIitem item)
{
if(!List.Contains(item))
List.Add(item);
}
/// <summary>
/// 添加字符串字段
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddField(string field,string value)
{
ListAdd(new SQLIitem(field, value));
}
/// <summary>
/// 添加null值字段
/// </summary>
/// <param name="field"></param>
public void AddNullField(string field)
{
if (!List_Nullparam.Contains(field))
List_Nullparam.Add(field);
}
/// <summary>
/// 添加日期字段
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddField(string field, DateTime value)
{
ListAdd(new SQLIitem(field, value));
}
/// <summary>
/// 添加int字段
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddField(string field, int value)
{
ListAdd(new SQLIitem(field, value));
}
/// <summary>
/// 添加double字段
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddField(string field, double value)
{
ListAdd(new SQLIitem(field, value));
}
/// <summary>
/// 添加decimal字段
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddField(string field, decimal value)
{
ListAdd(new SQLIitem(field, value));
}
/// <summary>
/// 添加byte[]字段
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddField(string field, byte[] value)
{
ListAdd(new SQLIitem(field, value));
}
/// <summary>
/// 添加bool字段
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddField(string field, bool value)
{
ListAdd(new SQLIitem(field, value));
}
/// <summary>
/// 添加用于计算的值
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddFieldCalc(string field, string value)
{
List_calcparam.Add(new SQLIitem(field, value) { isNoValue=true });
}
/// <summary>
/// 添加Int64字段
/// </summary>
/// <param name="field"></param>
/// <param name="value"></param>
public void AddField(string field, Int64 value)
{
ListAdd(new SQLIitem(field, value));
}
/// <summary>
/// 清空内容
/// </summary>
public void Clear()
{
List.Clear();
List_param.Clear();
List_calcparam.Clear();
List_Nullparam.Clear();
}
/// <summary>
/// 数量
/// </summary>
public int Count
{
get { return List.Count + List_param.Count; }
}
/// <summary>
///
/// </summary>
public List<SQLIitem> List_calcparam { get; set; } = new List<SQLIitem>();
/// <summary>
/// 输出多条件搜索。
/// </summary>
/// <param name="Fields">字段名,多个字段请用逗号分隔。</param>
/// <param name="SearchText">多个条件之间请用空格隔开</param>
/// <returns></returns>
public string GetSearchSQL(string Fields, string SearchText)
{
string tmpSQL = "";
string tmpFieldSQL = "(";
string[] m_name = Fields.Split(",".ToCharArray());
string[] tmpFieldNames = new string[m_name.Length];
for (int i = 0; i < m_name.Length; i++)
{
#region
tmpFieldNames[i] = m_name[i];
if (i == 0)
{
tmpFieldSQL += tmpFieldNames[i] + " like @SearchText";
}
else
{
tmpFieldSQL += " or " + tmpFieldNames[i] + " like @SearchText";
}
#endregion
}
tmpFieldSQL += ")";
string[] m_SearchText = SearchText.Split(' ');
string tmpSearchSQL = "";
for (int i = 0; i < m_SearchText.Length; i++)
{
if (i == 0)
{
tmpSearchSQL = tmpFieldSQL.Replace("@SearchText", "@st_ry" + i.ToString());
}
else
{
tmpSearchSQL += " and " + tmpFieldSQL.Replace("@SearchText", "@st_ry" + i.ToString());
}
AddParameter("@st_ry" + i.ToString(), "%" + m_SearchText[i] + "%");
}
return tmpSQL + tmpSearchSQL;
}
/// <summary>
/// 获取插入SQL语句
/// </summary>
/// <returns></returns>
public string GetInsertSQL()
{
string tmpSQL = "insert into " + TableName + " ";
string tmpFieldSQL = "(";
string valueSQL = "(";
for (int i = 0; i <List.Count; i++)
{
SQLIitem item = List[i];
tmpFieldSQL +=item.Field + ",";
if (item.value is long int1)
{
valueSQL += int1 + ",";
}
else if (item.value is int @int)
{
valueSQL += @int + ",";
}
else
{
valueSQL += "@" + item.Field.TrimStart('[').TrimEnd(']') + ",";
}
}
for (int i = 0; i < List_Nullparam.Count; i++)
{
tmpFieldSQL += List_Nullparam[i] + ",";
valueSQL += "null,";
}
return tmpSQL + tmpFieldSQL.Substring(0, tmpFieldSQL.Length - 1) + ") values" + valueSQL.Substring(0, valueSQL.Length - 1) + ")";
}
/// <summary>
/// 获取更新SQL语句
/// </summary>
/// <returns></returns>
public string GetUpdateSQL()
{
string tmpSQL = "update " + TableName + " set ";
for (int i = 0; i < List.Count; i++)
{
SQLIitem item = List[i];
if (item.value is long int1)
{
tmpSQL += item.Field + "=" + int1 + ",";
}
else if (item.value is int @int)
{
tmpSQL += item.Field + "=" + @int + ",";
}
else
{
tmpSQL += item.Field + "=" + "@" + item.Field.TrimStart('[').TrimEnd(']') + ",";
}
}
for (int i = 0; i < List_Nullparam.Count; i++)
{
tmpSQL += List_Nullparam[i] + "=" + "null,";
}
return tmpSQL.Substring(0, tmpSQL.Length - 1);
}
/// <summary>
/// 添加参数
/// </summary>
/// <param name="name"></param>
/// <param name="value"></param>
public void AddParameter(string name,object value)
{
List_param.Add(new SQLIitem(name.TrimStart('@'), value));
}
/// <summary>
/// 获取Ole参数
/// </summary>
/// <returns></returns>
public System.Data.OleDb.OleDbParameter[] GetOleParameters()
{
System.Data.OleDb.OleDbParameter[] defPar = new System.Data.OleDb.OleDbParameter[List.Count+ List_param.Count];
for (int i = 0; i < List.Count; i++)
{
SQLIitem item = List[i];
defPar[i] =new System.Data.OleDb.OleDbParameter("@"+item.Field, item.value);
}
for (int i = List.Count; i < List.Count + List_param.Count; i++)
{
SQLIitem item = List_param[i- List.Count];
defPar[i] = new System.Data.OleDb.OleDbParameter("@" + item.Field.TrimStart('@'), item.value);
}
return defPar;
}
/// <summary>
/// 获取SQL参数
/// </summary>
/// <returns></returns>
public System.Data.SqlClient.SqlParameter[] GetSqlParameter()
{
System.Data.SqlClient.SqlParameter[] defPar = new System.Data.SqlClient.SqlParameter[List.Count + List_param.Count];
for (int i = 0; i < List.Count; i++)
{
SQLIitem item = (SQLIitem)List[i];
defPar[i] = new System.Data.SqlClient.SqlParameter("@" + item.Field, item.value);
}
for (int i = List.Count; i < List.Count + List_param.Count; i++)
{
SQLIitem item = (SQLIitem)List_param[i - List.Count];
defPar[i] = new System.Data.SqlClient.SqlParameter("@" + item.Field.TrimStart('@'), item.value);
}
return defPar;
}
}
}