个人数据库帮助类:提供两种访问方式OleDb(需安装Oracle客户端)和 Oracle.ManagedDataAccess.Client(需Oracle.ManagedDataAccess.dll)
多说无益上代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
using System.Data;
using System.Data.OleDb;
using System.Data.Common;
using Gaofajin.Attribute;
namespace Gaofajin.Data
{
public class DbHelper
{
public bool IsOledb { get; set; } = false;
DbConnection connection;
DbCommand cmd;
DbCommandBuilder cmb;
DbDataAdapter adp;
DbTransaction transaction;
public String DBVersion
{
get
{
if (connection != null)
return connection.ServerVersion;
return "未知";
}
}
public DbConnection GetConnection() => connection;
string Try_catch(Action a)
{
try
{
a();
return "操作成功!";
}
catch (Exception ex)
{
return ex.Message;
}
}
public void SetConnectionString(string constr)
{
if (IsOledb)
connection = new OleDbConnection();
else connection = new OracleConnection();
connection.ConnectionString = constr;
}
public string Open()=> Try_catch(connection.Open);
public string Close()=>Try_catch(connection.Close);
public DbResult GetData(string sql)
{
try
{
if (IsOledb)
{
cmd = new OleDbCommand(sql, (OleDbConnection)connection);
adp = new OleDbDataAdapter((OleDbCommand)cmd);
}
else
{
cmd = new OracleCommand(sql, (OracleConnection)connection);
adp = new OracleDataAdapter((OracleCommand)cmd);
}
DataTable dt = new DataTable();
int m = adp.Fill(dt);
return new DbResult(m, "执行查询成功!", dt);
}
catch (Exception ex)
{
return new DbResult(-1, ex.Message, null);
}
}
public DbResult GetDataforUpdate(string sql)
{
try
{
if (IsOledb)
{
cmd = new OleDbCommand(sql, (OleDbConnection)connection);
adp = new OleDbDataAdapter((OleDbCommand)cmd);
cmb = new OleDbCommandBuilder((OleDbDataAdapter)adp);
}
else
{
cmd = new OracleCommand(sql, (OracleConnection)connection);
adp = new OracleDataAdapter((OracleCommand)cmd);
cmb = new OracleCommandBuilder((OracleDataAdapter)adp);
}
DataTable dt = new DataTable();
int m = adp.Fill(dt);
return new DbResult(m, "执行查询成功!", dt);
}
catch (Exception ex)
{
return new DbResult(-1, ex.Message, null);
}
}
public void UpdateFrom(DataTable dt)
{
if (adp != null)
adp.Update(dt);
}
public DbResult ExeSql(string sql)
{
try
{
if (IsOledb)
{
cmd = new OleDbCommand(sql, (OleDbConnection)connection);
}
else
{
cmd = new OracleCommand(sql, (OracleConnection)connection);
}
int m = cmd.ExecuteNonQuery();
return new DbResult(m, "执行SQL成功!", null);
}
catch (Exception ex)
{
return new DbResult(-1, ex.Message, null);
}
}
public DbResult Proc(string ProcName, IDataParameter[] paras)
{
try
{
if (IsOledb)
{
cmd = new OleDbCommand
{
Connection = (OleDbConnection)connection,
CommandText = ProcName,
CommandType = CommandType.StoredProcedure
};
}
else
{
cmd = new OracleCommand
{
Connection = (OracleConnection)connection,
CommandText = ProcName,
CommandType = CommandType.StoredProcedure
};
}
foreach (var para in paras)
{
cmd.Parameters.Add(para);
}
int m = cmd.ExecuteNonQuery();
return new DbResult(m, "执行存储过程成功!", null);
}
catch (Exception ex)
{
return new DbResult(-1, ex.Message, null);
}
}
public DbResult Procselect(string ProcName, IDataParameter[] paras)
{
try
{
if (IsOledb)
{
adp = new OleDbDataAdapter
{
SelectCommand = new OleDbCommand
{
Connection = (OleDbConnection)connection,
CommandText = ProcName,
CommandType = CommandType.StoredProcedure
}
};
}
else
{
adp = new OracleDataAdapter
{
SelectCommand = new OracleCommand
{
Connection = (OracleConnection)connection,
CommandText = ProcName,
CommandType = CommandType.StoredProcedure
}
};
}
adp.SelectCommand.Parameters.AddRange(paras);
DataTable dt = new DataTable();
int m = adp.Fill(dt);
return new DbResult(m, "执行存储过程成功!", dt);
}
catch (Exception ex)
{
return new DbResult(-1, ex.Message, null);
}
}
public void BeginTrans()
{
transaction = connection.BeginTransaction();
}
public void CommitTrans()
{
if (transaction != null)
transaction.Commit();
}
public void RollBack()
{
if (transaction != null)
transaction.Rollback();
}
public List<string> GetAllTableName(string schemaName, String CollName, string User)
{
DataTable dt = connection.GetSchema(schemaName);
List<string> Tablesname = new List<string>();
if (dt != null)
{
DataRow[] drs = dt.Select(string.Format("TABLE_SCHEMA='{0}'and TABLE_TYPE LIKE'%{1}%'", User, CollName));
foreach (var dr in drs)
{
Tablesname.Add(dr["TABLE_NAME"].ToString());
}
}
return Tablesname;
}
string GetConnecttionString(string host, string port, string service_name, string user, string pwd)
{
if (string.IsNullOrEmpty(service_name))
{
System.Windows.Forms.MessageBox.Show("Service_Name不能为空或者null", "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
return null;
}
if (string.IsNullOrEmpty(user))
{
System.Windows.Forms.MessageBox.Show("userName不能为空或者null", "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
return null;
}
if (string.IsNullOrEmpty(pwd))
{
System.Windows.Forms.MessageBox.Show("password不能为空或者null", "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
return null;
}
string str = "DATA SOURCE=\"(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = {0})(PORT = {1})))(CONNECT_DATA = (SERVICE_NAME = {2})))\";USER ID={3};PASSWORD={4}";
return string.Format(str, (string.IsNullOrEmpty(host) ? "localhost" : host), (string.IsNullOrEmpty(port)? 1521 :int.Parse(port)), service_name, user, pwd);
}
string GetConnecttionString(string Name, string user, string pwd)
{
if (string.IsNullOrEmpty(Name))
{
System.Windows.Forms.MessageBox.Show("Name不能为空或者null", "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
return null;
}
if (string.IsNullOrEmpty(user))
{
System.Windows.Forms.MessageBox.Show("user不能为空或者null", "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
return null;
}
if (string.IsNullOrEmpty(pwd))
{
System.Windows.Forms.MessageBox.Show("password不能为空或者null", "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
return null;
}
string str = "Provider = MSDAORA.1; User ID = {0}; password ={1}; Data Source = {2}";
return string.Format(str, user, pwd, Name);
}
public string GetConnecttionString(params string[] str) => (IsOledb == true) ? GetConnecttionString(str[0], str[1], str[2]) : GetConnecttionString(str[0], str[1], str[2], str[3], str[4]);
}
public class DbResult
{
public int ErrCode { get; }
public string ErrMsg { get; }
public DataTable Data { get; }
public DbResult(int ecode, string emsg, DataTable dt)
{
ErrCode = ecode;
ErrMsg = emsg;
Data = dt;
}
}
}