oracle数据库操作 接口封装
1.如下
using Oracle.ManagedDataAccess.Client; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataMove { public class DBSupport :IDisposable { //public static string conncet = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); string conn; public DBSupport(string connect) { conn = connect; if (mQracleConnecting == null) mQracleConnecting = new OracleConnection(connect); if (mQracleConnecting.State != ConnectionState.Open) mQracleConnecting.Open(); } #region DB OracleConnection mQracleConnecting = null; public OracleConnection QracleConnecting { get { return mQracleConnecting; } } public DataTable DBGetDataTable(string sql) { try { DataTable dataSet = new DataTable(); OracleDataAdapter OraDA = new OracleDataAdapter(sql, mQracleConnecting); OraDA.Fill(dataSet); return dataSet; } catch (Exception) { FileSupport.Instance.Write("数据库连接异常" + conn); return null; } } // 执行SQL语句,返回所影响的行数 public int ExecuteSQL(string sql) { int Cmd = 0; OracleCommand command = new OracleCommand(sql, QracleConnecting); try { Cmd = command.ExecuteNonQuery(); } catch(Exception ex) { FileSupport.Instance.Write(ex.ToString()); } return Cmd; } //public int ExecuteSQL_Update(string sql) //{ // OracleDataAdapter OraDA = new OracleDataAdapter(sql, QracleConnecting); // return OraDA.UpdateCommand.ExecuteNonQuery(); //} //public int ExecuteSQL_Insert(string sql) //{ // OracleDataAdapter OraDA = new OracleDataAdapter(sql, QracleConnecting); // return OraDA.InsertCommand.ExecuteNonQuery(); //} public int ExecuteSQL_Insert(object item) { var type = item.GetType(); var tablename = type.Name; var atts = type.GetProperties(); var keys=""; var values =""; foreach(var a in atts) { var aname = a.Name; var value = a.GetValue(item); keys += aname+","; values += GetValue2String(value) + ","; } keys=keys.Trim(','); values = values.Trim(','); var sql = "INSERT INTO "+tablename+" ( " + keys + " ) VALUES ( " + values +" )"; return ExecuteSQL(sql); } #endregion /// <summary> /// 获取对象列表 /// </summary> /// <typeparam name="T">表所对应的对象名称</typeparam> /// <param name="sql">查询语句</param> /// <returns>返回获取到的对象实例列表</returns> public List<T> QueryObjectList<T>(string sql) where T : new() { var dataset = ReturnDataSet(sql, "table"); if (dataset != null) { var table = dataset.Tables[0]; return ConvertTableToObject<T>(table); } return null; } public DataSet ReturnDataSet(string sql, string DataSetName) { DataSet dataSet = new DataSet(); OracleDataAdapter OraDA = new OracleDataAdapter(sql, QracleConnecting); OraDA.Fill(dataSet, DataSetName); return dataSet; } public List<T> ConvertTableToObject<T>(DataTable t) where T : new() { if (t == null) return null; List<T> list = new List<T>(); foreach (DataRow row in t.Rows) { T obj = new T(); GetObject(t.Columns, row, obj); if (obj != null && obj is T) list.Add(obj); } return list; } public T ConvertToObject<T>(DataRow row) where T : new() { object obj = new T(); if (row != null) { DataTable t = row.Table; GetObject(t.Columns, row, obj); } if (obj != null && obj is T) return (T)obj; else return default(T); } void GetObject(DataColumnCollection cols, DataRow dr, Object obj) { Type t = obj.GetType(); var props = t.GetProperties(); foreach (var pro in props) { if (cols.Contains(pro.Name)) { if (dr[pro.Name] != DBNull.Value) { try { switch (pro.PropertyType.Name) { case "Int32": { Int32 value = Convert.ToInt32(dr[pro.Name]); pro.SetValue(obj, value, null); } break; case "Double": { double value = Convert.ToDouble(dr[pro.Name]); pro.SetValue(obj, value, null); } break; case "Single": { float value = Convert.ToSingle(dr[pro.Name]); pro.SetValue(obj, value, null); } break; case "Int64": { Int64 value = Convert.ToInt64(dr[pro.Name]); pro.SetValue(obj, value, null); } break; case "Int16": { Int16 value = Convert.ToInt16(dr[pro.Name]); pro.SetValue(obj, value, null); } break; case "Decimal": { Decimal value = Convert.ToDecimal(dr[pro.Name]); pro.SetValue(obj, value, null); } break; default: { pro.SetValue(obj, dr[pro.Name], null); } break; } } catch { pro.SetValue(obj, null, null); } finally { } } else { pro.SetValue(obj, null, null); } } } } string GetValue2String(Object obj) { if (obj == null) return "null"; Type t = obj.GetType(); try { switch (t.Name) { case "String": { return "'"+ obj.ToString()+"'"; } case "DateTime": { return "to_date('" + obj.ToString() + "','YYYY-MM-DD hh24:mi:ss')"; } default: { return obj.ToString(); } } } catch { return ""; } } public void Dispose() { if(mQracleConnecting.State == ConnectionState.Open) mQracleConnecting.Close(); } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库