C# SCADA
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.

732 lines
26 KiB

using System;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
using System.Net;
namespace DatabaseLib
{
public class DataHelper //:MarshalByRefObject
{
static string m_ConnStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=SharpSCADA;Integrated Security=True";
static string m_Path = @"D:\HDA";
static string m_host = Environment.MachineName;
public static string HostName
{
get { return m_host; }
}
public static string ConnectString
{
get { return m_ConnStr; }
}
public static string HdaPath
{
get { return m_Path; }
}
const string DATALOGSOURCE = "Data Operations";
const string DATALOGNAME = "Data Log";
static EventLog Log;
static DataHelper()
{
if (!EventLog.SourceExists(DATALOGSOURCE))
EventLog.CreateEventSource(DATALOGSOURCE, DATALOGNAME);
Log = new EventLog(DATALOGNAME);
try
{
using (StreamReader objReader = new StreamReader(@"C:\DataConfig\host.cfg"))
{
m_host = objReader.ReadLine();
m_ConnStr = objReader.ReadLine();
m_Path = objReader.ReadLine();
IPAddress addr;
if (string.IsNullOrEmpty(m_host) || !IPAddress.TryParse(m_host, out addr))
{
m_host = Environment.MachineName;
}
}
}
catch (Exception e)
{
AddErrorLog(e);
}
}
public static void AddErrorLog(Exception e)
{
string err = "";
Exception exp = e;
while (exp != null)
{
err += string.Format("\n {0}", exp.Message);
exp = exp.InnerException;
}
err += string.Format("\n {0}", e.StackTrace);
Log.Source = DATALOGSOURCE;
Log.WriteEntry(err, EventLogEntryType.Error);
}
public static void CallException(string message)
{
AddErrorLog(new Exception(message));
}
public static bool ConnectionTest()
{
//创建连接对象
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
//mySqlConnection.ConnectionTimeout = 1;//设置连接超时的时间
try
{
//Open DataBase
//打开数据库
m_Conn.Open();
if (m_Conn.State == ConnectionState.Open)
{
return true;
}
}
catch (Exception e)
{
CallException(e.Message);
}
}
//mySqlConnection is a SqlConnection object
return false;
}
public static SqlParameter CreateInputParam(string paramName, SqlDbType dbType, object objValue)
{
SqlParameter parameter = new SqlParameter(paramName, dbType);
if (objValue == null)
{
parameter.IsNullable = true;
parameter.Value = DBNull.Value;
return parameter;
}
parameter.Value = objValue;
return parameter;
}
#region ExecuteDataset //执行查询语句,返回一个记录集
/// <summary>
/// 返回记录集
/// </summary>
/// <param name="SQL">用于返回记录集的SQL语句</param>
/// <returns>记录集</returns>
public static DataSet ExecuteDataset(string SQL)
{
DataSet ds = new DataSet();
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
try
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand(SQL, m_Conn);
da.SelectCommand = cmd;
da.Fill(ds);
}
catch (Exception e)
{
CallException(SQL + " " + e.Message);
}
}
return ds;
}
/// <summary>
/// 返回记录集
/// </summary>
/// <param name="SQL">用于返回记录集的SQL语句</param>
/// <param name="TableName">映射表名</param>
/// <returns>记录集</returns>
public static DataSet ExecuteDataset(string SQL, string TableName)
{
DataSet ds = new DataSet();
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
try
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand(SQL, m_Conn);
da.SelectCommand = cmd;
da.Fill(ds, TableName);
}
catch (Exception e)
{
CallException(SQL + " " + e.Message);
}
}
return ds;
}
/// <summary>
/// 返回包含多个表的记录集
/// </summary>
/// <param name="SQLs">用于返回记录集的SQL语句</param>
/// <param name="TableNames">映射表名</param>
/// <returns>记录集</returns>
public static DataSet ExecuteDataset(string[] SQLs, string[] TableNames)
{
DataSet ds = new DataSet();
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
try
{
for (int i = 0; i < SQLs.Length; i++)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand(SQLs[i], m_Conn);
da.SelectCommand = cmd;
da.Fill(ds, TableNames[i]);
}
}
catch (Exception e)
{
CallException(SQLs + " " + e.Message);
}
}
return ds;
}
#endregion ExecuteDataset
/// <summary>
/// 返回表
/// </summary>
/// <param name="SQL">用于返回记录集的SQL语句</param>
/// <returns>记录集</returns>
public static DataTable ExecuteDataTable(string SQL)
{
DataTable dt = new DataTable();
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
try
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand(SQL, m_Conn);
da.SelectCommand = cmd;
da.Fill(dt);
}
catch (Exception e)
{
CallException(SQL + " " + e.Message);
}
}
return dt;
}
#region ExecuteNonQuery //执行非查询语句
/// <summary>
/// 执行一条INSERT、UPDATE、DELETE语句
/// </summary>
/// <param name="SQL">T-SQL语句</param>
/// <returns>返回影响的行数</returns>
public static int ExecuteNonQuery(string SQL)
{
int res = -1;
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
SqlTransaction sqlT = null;
try
{
using (SqlCommand cmd = new SqlCommand(SQL, m_Conn))
{
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
cmd.Connection = m_Conn;
sqlT = m_Conn.BeginTransaction();
cmd.Transaction = sqlT;
res = cmd.ExecuteNonQuery();
sqlT.Commit();
}
}
catch (Exception e)
{
if (sqlT != null)
sqlT.Rollback();
CallException(SQL + " " + e.Message);
return -1;
}
return res;
}
}
/// <summary>
/// 执行一组INSERT、UPDATE、DELETE语句
/// </summary>
/// <param name="SQLs">T-SQL语句</param>
/// <returns>返回影响的行数</returns>
public static int ExecuteNonQuery(string[] SQLs)
{
int res = -1;
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
SqlTransaction sqlT = null;
SqlCommand cmd = new SqlCommand();
try
{
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
cmd.Connection = m_Conn;
sqlT = m_Conn.BeginTransaction();
cmd.Transaction = sqlT;
for (int i = 0; i < SQLs.Length; i++)
{
cmd.CommandText = SQLs[i];
res = cmd.ExecuteNonQuery();
}
sqlT.Commit();
}
catch (Exception e)
{
if (sqlT != null)
sqlT.Rollback();
CallException(SQLs + " " + e.Message);
res = -1;
}
return res;
}
}
/// <summary>
/// 执行一组INSERT、UPDATE、DELETE语句
/// </summary>
/// <param name="SQLs">T-SQL语句</param>
/// <param name="Pars">执行参数</param>
/// <returns>返回影响的行数</returns>
public static int ExecuteNonQuery(string[] SQLs, object[][] Pars)
{
int res = -1;
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
SqlTransaction sqlT = null;
SqlCommand cmd = new SqlCommand();
try
{
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
cmd.Connection = m_Conn;
sqlT = m_Conn.BeginTransaction();
cmd.Transaction = sqlT;
for (int i = 0; i < SQLs.Length; i++)
{
cmd.CommandText = SQLs[i];
cmd.Parameters.Clear();
for (int j = 0; j < Pars[i].Length; j++)
{
cmd.Parameters.AddWithValue("@p" + j.ToString(), Pars[i][j]);
}
res = cmd.ExecuteNonQuery();
}
sqlT.Commit();
}
catch (Exception e)
{
if (sqlT != null)
sqlT.Rollback();
CallException(SQLs + " " + e.Message);
res = -1;
}
return res;
}
}
#endregion ExecuteNonQuery
#region FillDataSet //填充一个记录集
/// <summary>
/// 用指定的SQL语句来填充一个记录集
/// </summary>
/// <param name="ds">记录集</param>
/// <param name="SQL">SELECT语句</param>
/// <param name="TableName">映射表名</param>
public static void FillDataSet(ref DataSet ds, string SQL, string TableName)
{
try
{
SqlConnection m_Conn;
m_Conn = new SqlConnection(m_ConnStr);
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand(SQL, m_Conn);
da.SelectCommand = cmd;
da.Fill(ds, TableName);
}
catch (Exception e)
{
CallException(SQL + " " + e.Message);
}
}
#endregion FillDataSet
#region
// <summary>
/// 返回一个SqlDataReader
/// </summary>
public static SqlDataReader ExecuteReader(string sSQL)
{
SqlConnection connection = new SqlConnection(m_ConnStr);
SqlCommand command = new SqlCommand(sSQL, connection);
if (connection.State == ConnectionState.Closed)
connection.Open();
return command.ExecuteReader(CommandBehavior.CloseConnection);
}
public static SqlDataReader ExecuteProcedureReader(string sSQL, params SqlParameter[] ParaName)
{
SqlConnection connection = new SqlConnection(m_ConnStr);
SqlCommand command = new SqlCommand(sSQL, connection);
command.CommandType = CommandType.StoredProcedure;
if (ParaName != null)
{
command.Parameters.AddRange(ParaName);
}
try
{
if (connection.State == ConnectionState.Closed)
connection.Open();
return command.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception e)
{
CallException(sSQL + " " + e.Message);
return null;
}
}
#endregion
#region ExecuteScalar //执行查询,并返回查询所返回的结果集中第一行的第一列
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列
/// </summary>
/// <param name="sSQL">SQL语句</param>
/// <returns></returns>
public static object ExecuteScalar(string sSQL)
{
SqlTransaction sqlT = null;
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
SqlCommand cmd = new SqlCommand(sSQL, m_Conn);
try
{
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
sqlT = m_Conn.BeginTransaction();
cmd.Transaction = sqlT;
var res = cmd.ExecuteScalar();
sqlT.Commit();
if (res == DBNull.Value) res = null;
return res;
}
catch (Exception e)
{
if (sqlT != null)
sqlT.Rollback();
CallException(sSQL + " " + e.Message);
return null;
}
}
}
#endregion ExecuteScalar
#region ExecuteStoredProcedure //执行一个存储过程
/// <summary>
/// 执行一个带参数的存储过程
/// </summary>
/// <param name="ProName">存储过程名</param>
/// <param name="ParaName">参数名称</param>
/// <param name="ParaDir">参数方向,Input参数是输入参数 InputOutput参数既能输入,也能输出 Output参数是输出参数 ReturnValue参数存储过程返回值。</param>
/// <param name="Para">参数对象数组</param>
/// <returns>成功返回true,失败返回false</returns>
public static int ExecuteStoredProcedure(string ProName, params SqlParameter[] ParaName)
{
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
try
{
SqlCommand cmd = new SqlCommand(ProName, m_Conn)
{
CommandType = CommandType.StoredProcedure
};
if (ParaName != null)
{
cmd.Parameters.AddRange(ParaName);
}
SqlParameter param = new SqlParameter();
cmd.Parameters.Add(param);
param.Direction = ParameterDirection.ReturnValue;
if (m_Conn.State == ConnectionState.Closed)
{
m_Conn.Open();
}
cmd.ExecuteNonQuery();
return (int)param.Value;
}
catch (Exception e)
{
CallException(ProName + " " + e.Message);
return -1;
}
}
}
/// <summary>
/// 执行一个没有参数和返回值的存储过程(默认参数类型)
/// </summary>
/// <param name="ProName">存储过程名</param>
/// <param name="Para">参数对象数组</param>
/// <returns>成功返回true,失败返回false</returns>
public static bool ExecuteStoredProcedure(string ProName)
{
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
try
{
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
SqlCommand cmd = new SqlCommand(ProName, m_Conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
return true;
}
catch (Exception e)
{
CallException(ProName + " " + e.Message);
return false;
}
}
}
/// <summary>
/// 执行一个带参数的存储过程,并返回数据集
/// </summary>
/// <param name="ProName">存储过程名</param>
/// <param name="ParaName">参数名称</param>
/// <param name="Para">参数对象数组</param>
/// <param name="ds">执行过程中返回的数据集</param>
/// <returns>成功返回true,失败返回false</returns>
public static DataSet ExecuteDataSetProcedure(string ProName, ref int returnValue, params SqlParameter[] ParaName)
{
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
DataSet ds = new DataSet();
try
{
SqlCommand cmd = new SqlCommand(ProName, m_Conn);
cmd.CommandType = CommandType.StoredProcedure;
if (ParaName != null)
{
cmd.Parameters.AddRange(ParaName);
}
SqlParameter param = new SqlParameter { Direction = ParameterDirection.ReturnValue };
cmd.Parameters.Add(param);
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
returnValue = (int)param.Value;
return ds;
}
catch (Exception e)
{
CallException(ProName + " " + e.Message);
return null;
}
}
}
public static DataSet ExecuteDataSetProcedure(string ProName, params SqlParameter[] ParaName)
{
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
DataSet ds = new DataSet();
try
{
SqlCommand cmd = new SqlCommand(ProName, m_Conn);
cmd.CommandType = CommandType.StoredProcedure;
if (ParaName != null)
{
cmd.Parameters.AddRange(ParaName);
}
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
return ds;
}
catch (Exception e)
{
CallException(ProName + " " + e.Message);
return null;
}
}
}
/// <summary>
/// 执行一个带参数的存储过程,并返回数据集
/// </summary>
/// <param name="ProName">存储过程名</param>
/// <param name="ParaName">参数名称</param>
/// <param name="Para">参数对象数组</param>
/// <param name="ds">执行过程中返回的数据集</param>
/// <returns>成功返回true,失败返回false</returns>
///
public static DataTable ExecuteDataTableProcedure(string ProName, params SqlParameter[] ParaName)
{
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
DataTable ds = new DataTable();
try
{
SqlCommand cmd = new SqlCommand(ProName, m_Conn);
cmd.CommandType = CommandType.StoredProcedure;
if (ParaName != null)
{
cmd.Parameters.AddRange(ParaName);
}
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
return ds;
}
catch (Exception e)
{
CallException(ProName + " " + e.Message);
return null;
}
}
}
public static DataTable ExecuteDataTableProcedure(string ProName, ref int returnValue, SqlParameter[] ParaName)
{
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
DataTable ds = new DataTable();
try
{
SqlCommand cmd = new SqlCommand(ProName, m_Conn);
cmd.CommandType = CommandType.StoredProcedure;
if (ParaName != null)
{
cmd.Parameters.AddRange(ParaName);
}
SqlParameter param = new SqlParameter { Direction = ParameterDirection.ReturnValue };
cmd.Parameters.Add(param);
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
returnValue = (int)param.Value;
return ds;
}
catch (Exception e)
{
CallException(ProName + " " + e.Message);
return null;
}
}
}
/// <summary>
/// 执行一个带参数的存储过程,同时输出一行
/// </summary>
/// <param name="ProName">存储过程名</param>
/// <param name="ParaName">参数名称</param>
/// <param name="Para">参数对象数组</param>
/// <returns>返回整数</returns>
public static DataRow ExecuteDataRowProcedure(string ProName, params SqlParameter[] ParaName)
{
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
try
{
SqlCommand cmd = new SqlCommand(ProName, m_Conn);
cmd.CommandType = CommandType.StoredProcedure;
if (ParaName != null)
{
cmd.Parameters.AddRange(ParaName);
}
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
DataTable table = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(table);
if (table.Rows.Count > 0)
return table.Rows[0];
else
return table.NewRow();
}
catch (Exception e)
{
CallException(ProName + " " + e.Message);
return null;
}
}
}
/// <summary>
/// 执行一个带参数的存储过程,同时输出一行
/// </summary>
/// <param name="ProName">存储过程名</param>
/// <param name="ParaName">参数名称</param>
/// <param name="Para">参数对象数组</param>
/// <returns>返回整数</returns>
public static DataRowView ExecuteDataRowViewProcedure(string ProName, params SqlParameter[] ParaName)
{
using (SqlConnection m_Conn = new SqlConnection(m_ConnStr))
{
try
{
SqlCommand cmd = new SqlCommand(ProName, m_Conn);
cmd.CommandType = CommandType.StoredProcedure;
if (ParaName != null)
{
cmd.Parameters.AddRange(ParaName);
}
if (m_Conn.State == ConnectionState.Closed)
m_Conn.Open();
DataTable table = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(table);
if (table.Rows.Count > 0)
return table.DefaultView[0];
else
return table.DefaultView.AddNew();
}
catch (Exception e)
{
CallException(ProName + " " + e.Message);
return null;
}
}
}
#endregion ExecuteStoredProcedure
}
}