using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Sql;
using System.Data;
using System.Data.SqlClient;
namespace UtilityConsole
{
public delegate void ReadDataFromDataReader(SqlDataReader dataReader);
/// <summary>
/// 操作数据库的类
/// </summary>
public class DBHelper
{
private DataTable retDt; //返回给外面的数据列表
private int i;
private string strConnection; //连接字串
private bool isConnected;
private SqlConnection sqlConnection;
private SqlCommand sqlCommand;
private SqlDataReader dataReader;
private static DBHelper dbHelperInstance;
public string ConnectionStr
{
set
{
strConnection = value;
if (!isConnected)
{
ConnectDB(strConnection);
}
}
}
/// <summary>
/// 单例模式
/// </summary>
public static DBHelper Instance
{
get
{
if (dbHelperInstance == null)
{
dbHelperInstance = new DBHelper();
}
return dbHelperInstance;
}
}
/// <summary>
/// 是否连接成功
/// </summary>
public bool IsConnected
{
get { return isConnected; }
}
/// <summary>
/// 构造函数
/// </summary>
private DBHelper()
{
isConnected = false;
}
/// <summary>
/// 查询语句
/// </summary>
/// <param name="strSql">查询的sql</param>
/// <returns>返回的数据结果</returns>
public DataTable SelectDB(string strSql)
{
if (!ExecuteSqlStatement(strSql, new ReadDataFromDataReader(readDataFromDataReader)))
{
return null;
}
return retDt;
}
/// <summary>
/// 查询
/// </summary>
/// <param name="strSql"></param>
/// <returns></returns>
public DataSet QueryDB(string strSql,out string errorString)
{
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet ds = new DataSet("test");
adapter.SelectCommand = getCommandObject(strSql);
errorString = "";
try
{
adapter.Fill(ds, "test");
}
catch (System.Exception e)
{
errorString = e.Message;
return null;
}
return ds;
}
/// <summary>
/// 创建存储过程
/// </summary>
/// <param name="procedureName">存储过程名</param>
/// <returns>执行的行数</returns>
public int CreateProcedure(string procedureName,string strSql)
{
if (procedureName != null && procedureName.Length > 0 && strSql != null && strSql.Length > 0)
{
ExecuteSqlStatement(CreateDelProcedureString(procedureName));
return ExecuteSqlStatement(CreateBuildProcdureString(procedureName, strSql));
}
return -1;
}
/// <summary>
/// 删除存储过程
/// </summary>
/// <param name="procdureName">存储过程名</param>
/// <returns></returns>
public int DeleteAProcdure(string procdureName)
{
if (procdureName != null && procdureName.Length > 0)
{
return ExecuteSqlStatement(CreateDelProcedureString(procdureName));
}
return -1;
}
private string CreateDelProcedureString(string procedureName)
{
return string.Format("if object_id('{0}') is not null \r\nDROP PROCEDURE {1}\r\n", procedureName, procedureName);
}
private string CreateBuildProcdureString(string procedureName, string strSql)
{
return string.Format("Create procedure {0}\r\nas\r\n{1}", procedureName, strSql);
}
/// <summary>
/// 查询是否存在
/// </summary>
/// <param name="strSql"></param>
/// <returns></returns>
public bool Exists(string strSql)
{
retDt = SelectDB(strSql);
return (retDt != null && int.Parse(retDt.Rows[0][0].ToString()) > 0);
}
private DataTable CreateDataTable(int colCount)
{
DataTable dt = null;
DataColumn dc = null;
if (colCount > 0)
{
dt = new DataTable();
for (i = 0; i < colCount; ++i)
{
dc = new DataColumn(i.ToString());
dt.Columns.Add(dc);
}
}
return dt;
}
private void readDataFromDataReader(SqlDataReader dataReader)
{
DataRow dr;
retDt = null;
if (dataReader.HasRows)
{
retDt = CreateDataTable(dataReader.FieldCount);
if (retDt != null)
{
while (dataReader.Read())
{
dr = retDt.NewRow();
for (i = 0; i < dataReader.FieldCount; ++i)
{
dr[i] = dataReader[i].ToString();
}
retDt.Rows.Add(dr);
}
}
}
}
/// <summary>
/// 获取执行的命令
/// </summary>
/// <param name="strSql">sql语句</param>
/// <returns>执行的命令类</returns>
private SqlCommand getCommandObject(string strSql)
{
int ExcuteTimes = 0;
if (!isConnected)
{
do
{
ConnectDB(strConnection); //连接数据库
++ExcuteTimes;
} while (!isConnected && ExcuteTimes < 3); //尝试连接
if (!isConnected && ExcuteTimes == 3) //连接不成功
{
return null;
}
}
if (sqlCommand == null)
{
sqlCommand = new SqlCommand();
}
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = strSql; //执行sql语句
return sqlCommand;
}
/// <summary>
/// 执行sql语句
/// </summary>
/// <param name="strSql">sql语句</param>
/// <returns>影响的行数</returns>
public int ExecuteSqlStatement(string strSql)
{
int retCode = -1;
sqlCommand = getCommandObject(strSql);
if (sqlCommand != null)
{
retCode = sqlCommand.ExecuteNonQuery();
}
return retCode;
}
/// <summary>
/// 带回滚事务操作
/// </summary>
/// <param name="strSql">sql语句</param>
/// <returns>返回影响的行数</returns>
public int ExecuteSqlStatementTrans(string strSql)
{
int retCode = -1;
SqlTransaction sqlTrans;
sqlCommand = getCommandObject(strSql);
if (sqlCommand != null)
{
sqlTrans = sqlConnection.BeginTransaction();
sqlCommand.Transaction = sqlTrans; //设置事务
try
{
retCode = sqlCommand.ExecuteNonQuery();
sqlTrans.Commit();
}
catch (System.Data.SqlClient.SqlException)
{
sqlTrans.Rollback();
sqlCommand.Transaction = null;
sqlTrans.Dispose();
return -1;
}
}
return retCode;
}
/// <summary>
/// 执行sql语句并返回数据集
/// </summary>
/// <param name="strSql">sql语句</param>
/// <returns>数据集</returns>
public bool ExecuteSqlStatement(string strSql, ReadDataFromDataReader readAction)
{
sqlCommand = getCommandObject(strSql);
if (sqlCommand != null)
{
using (dataReader = sqlCommand.ExecuteReader())
{
if (readAction != null)
{
readAction(dataReader);
}
dataReader.Close();
}
return true;
}
return false;
}
/// <summary>
/// 关闭连接
/// </summary>
public void CloseConnect()
{
if (isConnected && sqlConnection != null)
{
sqlConnection.Close();
sqlConnection.Dispose();
sqlConnection = null;
}
}
/// <summary>
/// 连接数据库
/// </summary>
/// <param name="strConn"></param>
/// <returns></returns>
public bool ConnectDB(string strConn)
{
if (strConn != null && strConn.Length > 0)
{
try
{
sqlConnection = new SqlConnection(strConn);
if (sqlConnection.State == System.Data.ConnectionState.Closed)
{
sqlConnection.Open();
}
return (isConnected = (sqlConnection.State == System.Data.ConnectionState.Open));
}
catch (System.Exception e)
{
Console.WriteLine(e.ToString());
}
}
return false;
}
}
}
基础类,跟数据库打交道的类
我自己的一个数据库连接类,献丑了
最新推荐文章于 2024-07-26 13:52:53 发布