using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace CNAS_DBSync
{
public static class MySQLHelper
{
private static log4net.ILog log = log4net.LogManager.GetLogger("MySQLHelper");
private static String mConnStr = null;
public static void InitConnectionString(string strServerIP,string strServerPort,string strServerHost,string strServerUser,string strServerPwd)
{
mConnStr = "server=" + strServerIP + ";port=" + strServerPort + ";user=" + strServerUser + ";password=" + strServerPwd + ";database=" + strServerHost + ";CharSet=utf8";
}
///
/// 对SQLite数据库执行增删改操作,返回受影响的行数。
///
/// 要执行的增删改的SQL语句
///
public static int ExecuteNonQuery(String sql)
{
try
{
using (MySqlConnection connection = new MySqlConnection(mConnStr))
{
connection.Open();
MySqlTransaction transaction = connection.BeginTransaction();
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
int rows = cmd.ExecuteNonQuery();
transaction.Commit();
cmd.Parameters.Clear();
return rows;
}
catch (MySqlException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
log.Error(e2.Message);
throw e2;
}
log.Error(e1.Message);
throw e1;
}
}
}
}
catch (Exception e)
{
log.Error(e.Message);
throw e;
}
}
///
/// 对数据库执行增删改操作,返回受影响的行数。
///
/// 要执行的增删改的SQL语句
///
public static int ExecuteNonQuery(String sql, MySqlParameter[] cmdParams)
{
try
{
using (MySqlConnection connection = new MySqlConnection(mConnStr))
{
connection.Open();
MySqlTransaction transaction = connection.BeginTransaction();
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
int rows = cmd.ExecuteNonQuery();
transaction.Commit();
cmd.Parameters.Clear();
return rows;
}
catch (MySqlException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
log.Error(e2.Message);
throw e2;
}
log.Error(e1.Message);
throw e1;
}
}
}
}
catch (Exception e)
{
log.Error(e.Message);
throw e;
}
}
///
/// 对SQLite数据库执行操作,返回 返回第一行第一列数据
///
///
///
public static int ExecuteScalar(String sql)
{
try
{
using (MySqlConnection connection = new MySqlConnection(mConnStr))
{
connection.Open();
MySqlTransaction transaction = connection.BeginTransaction();
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
int line = 0;
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
String str = cmd.ExecuteScalar().ToString();
transaction.Commit();
line = Convert.ToInt32(str);
cmd.Parameters.Clear();
return line;
}
catch (MySqlException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
log.Error(e2.Message);
throw e2;
}
log.Error(e1.Message);
throw e1;
}
}
}
}
catch (Exception e)
{
log.Error(e.Message);
throw e;
}
}
///
/// 对SQLite数据库执行操作,返回 返回第一行第一列数据
///
///
///
public static int ExecuteScalar(String sql, MySqlParameter[] cmdParams)
{
try
{
using (MySqlConnection connection = new MySqlConnection(mConnStr))
{
connection.Open();
MySqlTransaction transaction = connection.BeginTransaction();
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
int line = 0;
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
String str = cmd.ExecuteScalar().ToString();
transaction.Commit();
line = Convert.ToInt32(str);
cmd.Parameters.Clear();
return line;
}
catch (MySqlException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
log.Error(e2.Message);
throw e2;
}
log.Error(e1.Message);
throw e1;
}
}
}
}
catch (Exception e)
{
log.Error(e.Message);
throw e;
}
}
///
/// 用执行的数据库连接执行一个返回数据集的sql命令
///
///
///
public static MySqlDataReader ExecuteReader(String sql)
{
try
{
//创建一个MySqlConnection对象
using (MySqlConnection connection = new MySqlConnection(mConnStr))
{
connection.Open();
MySqlTransaction transaction = connection.BeginTransaction();
//创建一个MySqlCommand对象
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
transaction.Commit();
cmd.Parameters.Clear();
return reader;
}
catch (MySqlException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
log.Error(e2.Message);
throw e2;
}
log.Error(e1.Message);
throw e1;
}
}
}
}
catch (Exception e)
{
log.Error(e.Message);
throw e;
}
}
///
/// 查询返回Dtaset
///
///
///
public static DataSet ExecuteDataSet(String sql)
{
try
{
//创建一个MySqlConnection对象
using (MySqlConnection connection = new MySqlConnection(mConnStr))
{
connection.Open();
MySqlTransaction transaction = connection.BeginTransaction();
//创建一个MySqlCommand对象
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
transaction.Commit();
//清除参数
cmd.Parameters.Clear();
return ds;
}
catch (MySqlException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
log.Error(e2.Message);
throw e2;
}
log.Error(e1.Message);
throw e1;
}
}
}
}
catch (Exception e)
{
log.Error(e.Message);
throw e;
}
}
///
/// 查询返回Dtaset
///
///
///
public static DataSet ExecuteDataSet(String sql, MySqlParameter[] cmdParams)
{
try
{
//创建一个MySqlConnection对象
using (MySqlConnection connection = new MySqlConnection(mConnStr))
{
connection.Open();
MySqlTransaction transaction = connection.BeginTransaction();
//创建一个MySqlCommand对象
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
transaction.Commit();
//清除参数
cmd.Parameters.Clear();
return ds;
}
catch (MySqlException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
log.Error(e2.Message);
throw e2;
}
log.Error(e1.Message);
throw e1;
}
}
}
}
catch (Exception e)
{
log.Error(e.Message);
throw e;
}
}
///
/// 准备执行一个命令
///
/// sql命令
/// OleDb连接
/// OleDb事务
/// 命令类型例如 存储过程或者文本
/// 命令文本,例如:Select * from Products
/// 执行命令的参数
private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (MySqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
public static bool TestConnectMySql()
{
bool bIfSuccess = false;
try
{
//创建一个MySqlConnection对象
using (MySqlConnection connection = new MySqlConnection(mConnStr))
{
connection.Open();
if (connection.State == System.Data.ConnectionState.Open)
bIfSuccess = true;
}
}
catch (Exception ex)
{
log.Error(ex.Message);
bIfSuccess = false;
}
return bIfSuccess;
}
}
}