using System; using System.Collections.Generic; using System.Data; using System.Data.Odbc; namespace AccessStudy.Core { /// /// 注意:参数用?代替,以顺序计数! /// 如:select * from tableA where id=? and age>? /// public class OdbcUtil : IDisposable { public OdbcConnection DbConnection { get; set; } public OdbcUtil() { var accessFile = $"{AppDomain.CurrentDomain.BaseDirectory}AccessDB\\Demo.accdb"; var connetString = $@"Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};Dbq={accessFile};"; DbConnection = new OdbcConnection(connetString); } public OdbcUtil(string connetString) { DbConnection = new OdbcConnection(connetString); } public OdbcUtil(OdbcConnection connectionStringBuilder) { DbConnection = new OdbcConnection(connectionStringBuilder.ConnectionString); } /// /// 表是否存在 /// public bool HasDataTable(string dataTableName) { var hosTable = false; try { OpenConnect(); hosTable = DbConnection.GetSchema("Tables", new string[4] { null, null, dataTableName, "TABLE" }).Rows.Count > 0; } catch (Exception ex) { hosTable = false; throw ex; } finally { CloseConnect(); } return false; } /// /// 获取DataSet /// public DataSet GetDataSet(string dataTableName) { DataSet dataSet = new DataSet(); try { OpenConnect(); var command = new OdbcCommand() { Connection = DbConnection, CommandType = CommandType.Text, CommandText = $"select * from {dataTableName};", }; var adapter = new OdbcDataAdapter(command); adapter.Fill(dataSet); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { CloseConnect(); } return dataSet; } /// /// 获取DataSet /// public DataSet GetDataSet(string sqlText, List parameters = null) { DataSet dataSet = new DataSet(); try { OpenConnect(); var command = new OdbcCommand() { Connection = DbConnection, CommandType = CommandType.Text, CommandText = sqlText, }; if (parameters != null) { command.Parameters.AddRange(parameters.ToArray()); } var adapter = new OdbcDataAdapter(command); adapter.Fill(dataSet); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { CloseConnect(); } return dataSet; } /// /// 获取DataTable /// public DataTable GetDataTable(string dataTableName) { DataSet dataSet = GetDataSet(dataTableName); return dataSet.Tables[0]; } /// /// 获取DataTable /// public DataTable GetDataTable(string sqlText, List parameters = null) { DataSet dataSet = GetDataSet(sqlText, parameters); return dataSet.Tables[0]; } /// /// 获取DataReader /// 切记:用完之后主动关闭连接 /// public OdbcDataReader GetDataReader(string dataTableName) { OdbcDataReader dataReader = null; try { OpenConnect(); var command = new OdbcCommand() { Connection = DbConnection, CommandType = CommandType.Text, CommandText = $"select * from {dataTableName};", }; dataReader = command.ExecuteReader(); } catch (Exception ex) { CloseConnect(); Console.WriteLine(ex.Message); } finally { //CloseConnect(); } return dataReader; } /// /// 获取DataReader /// 切记:用完之后主动关闭连接 /// public OdbcDataReader GetDataReader(string sqlText, List parameters = null) { OdbcDataReader dataReader = null; try { OpenConnect(); var command = new OdbcCommand() { Connection = DbConnection, CommandType = CommandType.Text, CommandText = sqlText, }; if (parameters != null) { command.Parameters.AddRange(parameters.ToArray()); } dataReader = command.ExecuteReader(); } catch (Exception ex) { CloseConnect(); Console.WriteLine(ex.Message); } finally { //CloseConnect(); } return dataReader; } /// /// 获取第一行第一列的值 /// 不存在则为null /// public object GetScalar(string sqlText, List parameters = null) { object result = null; try { OpenConnect(); var command = new OdbcCommand() { Connection = DbConnection, CommandType = CommandType.Text, CommandText = sqlText, }; if (parameters != null) { command.Parameters.AddRange(parameters.ToArray()); } result = command.ExecuteScalar(); } catch (Exception ex) { throw ex; } finally { CloseConnect(); } return result; } /// /// 执行非查询语句 /// /// 受影响行数 public int ExecuteNonQuery(string sqlText, List parameters = null) { var result = 0; try { OpenConnect(); var command = new OdbcCommand() { Connection = DbConnection, CommandType = CommandType.Text, CommandText = sqlText, }; if (parameters != null) { command.Parameters.AddRange(parameters.ToArray()); } result = command.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { CloseConnect(); } return result; } /// /// 打开当前连接 /// public void OpenConnect() { if (DbConnection.State == ConnectionState.Closed) { DbConnection.Open(); } } /// /// 关闭当前连接 /// public void CloseConnect() { if (DbConnection.State != ConnectionState.Closed) { DbConnection.Close(); } } public void Dispose() { if (DbConnection.State == ConnectionState.Open) { DbConnection.Close(); } DbConnection.Dispose(); } } }