RaUI/Source/MyDb_MySQL/mySqlDataProvider.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

407 lines
14 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;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using DataParameter =MySql.Data.MySqlClient.MySqlParameter;
using DataCommand = MySql.Data.MySqlClient.MySqlCommand;
using DataAdapter = MySql.Data.MySqlClient.MySqlDataAdapter;
using ryCommonDb;
using ryCommon;
namespace ryCommonDb
{
/// <summary>
///
/// </summary>
public class MySqlDataProvider:IDbInterface
{
readonly ClsMySQLDb myDb = new ClsMySQLDb();
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int ConnDb(string sql)
{
var _sql = sql;
if(_sql.IndexOfEx("Allow User Variables")<=0)
{
if (!_sql.EndsWith(";")) { _sql += ";"; }
_sql += "Allow User Variables=True;";
}
myDb.fv_ConnStr = _sql;
return myDb.ConnDb();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public int CloseDb()
{
myDb.CloseDb();
return 1;
}
/// <summary>
///
/// </summary>
/// <param name="tableName"></param>
/// <param name="wheresql"></param>
/// <returns></returns>
public int GetCount(string tableName, string wheresql)
{
string m_where = "";
if (wheresql != "")
{
m_where = " where " + wheresql;
}
string sql = "select count(*) from " + tableName + m_where;
return Convert.ToInt32(myDb.ExecuteSQL(sql, (DataParameter[])GetParameter(), "0")[0]);
}
/// <summary>
///
/// </summary>
/// <param name="newPwd"></param>
/// <returns></returns>
public int ChangePwd(string newPwd)
{
return -1000;
}
private List<SQLIitem> list_param = new List<SQLIitem>();
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <param name="value"></param>
public void AddParameter(string name,object value)
{
list_param.Add(new SQLIitem(name, value));
}
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <param name="value"></param>
public void ClearParameter(object name, object value)
{
list_param.Clear();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public object[] GetParameter()
{
DataParameter[] defPar = new DataParameter[list_param.Count];
for (int i = 0; i < list_param.Count; i++)
{
SQLIitem item = (SQLIitem)list_param[i];
defPar[i] = new DataParameter("@" + item.Field.TrimStart('@').TrimStart('[').TrimEnd(']'), item.value);
}
return defPar;
}
/// <summary>
///
/// </summary>
/// <param name="mySQL"></param>
/// <returns></returns>
public object[] GetParameter(RyQuickSQL mySQL)
{
DataParameter[] defPar = new DataParameter[mySQL.List.Count + mySQL.List_param.Count];
for (int i = 0; i < mySQL.List.Count; i++)
{
SQLIitem item = (SQLIitem)mySQL.List[i];
defPar[i] = new DataParameter("@" + item.Field.TrimStart('@').TrimStart('[').TrimEnd(']'), item.value);
}
for (int i = mySQL.List.Count; i < mySQL.List.Count + mySQL.List_param.Count; i++)
{
SQLIitem item = (SQLIitem)mySQL.List_param[i - mySQL.List.Count];
defPar[i] = new DataParameter("@" + item.Field.TrimStart('@').TrimStart('[').TrimEnd(']'), item.value);
}
return defPar;
}
/// <summary>
///
/// </summary>
/// <param name="tableName"></param>
/// <param name="wheresql"></param>
/// <param name="orderSQL"></param>
/// <returns></returns>
public string GetPageSQL(string tableName, string wheresql, string orderSQL)
{
return GetPageSQL("*", tableName, wheresql, orderSQL);
}
/// <summary>
///
/// </summary>
/// <param name="field"></param>
/// <param name="tableName"></param>
/// <param name="wheresql"></param>
/// <param name="orderSQL"></param>
/// <returns></returns>
public string GetPageSQL(string field, string tableName, string wheresql, string orderSQL)
{
string m_where = "";
if (wheresql != "")
{
m_where = " where " + wheresql;
}
string m_order = "";
if (orderSQL != "")
{
m_order = " " + orderSQL;
}
return "select " + field + " from " + tableName + m_where + m_order + " limit {recordnum},{pagesize}";
}
/// <summary>
///
/// </summary>
/// <param name="tableName"></param>
/// <param name="wheresql"></param>
/// <param name="orderSQL"></param>
/// <returns></returns>
public string GetPageSQL2(string tableName, string wheresql, string orderSQL)
{
return "";
}
/// <summary>
///
/// </summary>
/// <param name="field"></param>
/// <param name="tableName"></param>
/// <param name="wheresql"></param>
/// <param name="orderSQL"></param>
/// <returns></returns>
public string GetPageSQL2(string field, string tableName, string wheresql, string orderSQL)
{
return "";
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="Parameter"></param>
/// <returns></returns>
public bool ContainsData(string sql, object[] Parameter)
{
System.Data.DataSet ds = ReadData(sql, Parameter);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
return true;
}
return false;
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="Parameter"></param>
/// <returns></returns>
public System.Data.DataSet ReadData(string sql, object[] Parameter)
{
DataCommand cmd = myDb.SQL_cn.CreateCommand();
cmd.Parameters.Clear();
cmd.CommandTimeout = 300;
if (Parameter != null)
{
for (int i = 0; i < Parameter.Length; i++)
{
cmd.Parameters.Add(Parameter[i]);
}
}
//cmd.Parameters.AddRange(Parameter);
cmd.CommandText = sql;
DataAdapter ad = new DataAdapter(cmd);
System.Data.DataSet ds=new System.Data.DataSet();
ad.Fill(ds);
ad.Dispose();
cmd.Parameters.Clear();
cmd.Dispose();
return ds;
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="mySQL"></param>
/// <returns></returns>
public System.Data.DataSet ReadData(string sql, RyQuickSQL mySQL)
{
return ReadData(sql,GetParameter(mySQL));
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public System.Data.DataSet ReadData(string sql)
{
object[] Parameter = null;
return ReadData(sql, Parameter);
}
/// <summary>
///
/// </summary>
/// <param name="tableName"></param>
/// <param name="id"></param>
/// <returns></returns>
public System.Data.DataSet ReadData(string tableName, string id)
{
object[] Parameter = null;
return ReadData("select * from " + tableName + " where id=" + id, Parameter);
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="Parameter"></param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, object[] Parameter)
{
DataCommand cmd = myDb.SQL_cn.CreateCommand();
cmd.Parameters.Clear();
cmd.CommandTimeout = 300;
if (Parameter!=null)
cmd.Parameters.AddRange(Parameter);
cmd.CommandText = sql;
int i= cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
return i;
}
/// <summary>
/// 执行SQL语句
/// </summary>
/// <param name="mySQL"></param>
/// <param name="wheresql">只针对IsAdd为false才生效where 以后的sql语句</param>
/// <param name="IsAdd">是新增还是更新</param>
/// <returns></returns>
public int ExecuteNonQuery(RyQuickSQL mySQL, string wheresql, bool IsAdd)
{
if (IsAdd)
{
return ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
}
else
{
if (wheresql.Length == 0) { return -1; }
return ExecuteNonQuery(mySQL.GetUpdateSQL() + " where " + wheresql, mySQL);
}
}
/// <summary>
/// 插入数据库
/// </summary>
/// <param name="mySQL"></param>
/// <returns></returns>
public int Insert(RyQuickSQL mySQL)
{
return ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL);
}
/// <summary>
/// 更新数据库
/// </summary>
/// <param name="mySQL"></param>
/// <param name="wheresql">where 以后的sql语句</param>
/// <returns></returns>
public int Update(RyQuickSQL mySQL, string wheresql)
{
if (wheresql.Length == 0) { return -1; }
return ExecuteNonQuery(mySQL.GetUpdateSQL() + " where " + wheresql, mySQL);
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="mySQL"></param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, RyQuickSQL mySQL)
{
return ExecuteNonQuery(sql, GetParameter(mySQL));
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int ExecuteNonQuery(string sql)
{
object[] pram = null;
return ExecuteNonQuery(sql, pram);
}
/// <summary>
///
/// </summary>
/// <param name="tableName"></param>
/// <param name="id"></param>
/// <returns></returns>
public int DelById(string tableName, string id)
{
object[] param = null;
return ExecuteNonQuery("delete from " + tableName + " where id=" + id, param);
}
/// <summary>
///
/// </summary>
/// <param name="mySQL"></param>
/// <returns></returns>
public int CreateDb(RyQuickSQL mySQL)
{
string tmpSQL = "CREATE TABLE " + mySQL.TableName + " ([ID] INTEGER PRIMARY KEY,";
for (int i = 0; i < mySQL.List.Count; i++)
{
SQLIitem item = (SQLIitem)mySQL.List[i];
if (item.value is string)
{
if (item.len == 0)
{
tmpSQL += "[" + item.Field + "] [nvarchar](max),";
}
else
{ tmpSQL += "[" + item.Field + "] [nvarchar]("+ item.len + "),"; }
}
else if (item.value is int || item.value is Int64)
{
tmpSQL += "[" + item.Field + "] [int] 0,";
}
else if (item.value is double || item.value is float)
{
tmpSQL += "[" + item.Field + "] [float] 0,";
}
else if (item.value is DateTime)
{
tmpSQL += "[" + item.Field + "] [DATETIME],";
}
else if (item.value is byte[])
{
tmpSQL += "[" + item.Field + "] [LONGBLOB],";
}
}
object[] param = null;
return ExecuteNonQuery(tmpSQL.Substring(0, tmpSQL.Length - 1) + ")", param);
}
MySql.Data.MySqlClient.MySqlTransaction tr;
/// <summary>
///
/// </summary>
public void BeginTransaction()
{
tr = myDb.SQL_cn.BeginTransaction();
}
/// <summary>
///
/// </summary>
public void Commit()
{
tr.Commit();
}
/// <summary>
///
/// </summary>
public void Free()
{
list_param.Clear();
myDb.CloseDb();
}
}
}