ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

基于委托的Oracle数据库连接

2022-07-19 21:32:37  阅读:163  来源: 互联网

标签:string 委托 数据库 cmd static sql Oracle new public


基于委托的Oracle数据库连接

1、引入包

Oracle.ManagedDataAccess.dll
System.Configuration
Newtonsoft.Json

2、App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
  <appSettings>
    <add key="oracleServer" value="localhost"/>
    <add key="database" value="net"/>
    <add key="user" value="system"/>
    <add key="pwd" value="manager"/>
  </appSettings>
</configuration>

3、OracleDbHelper

public class OracleDbHelper
{
	public static readonly string oracleServer = ConfigurationManager.AppSettings["oracleServer"];
	public static readonly string dataBase = ConfigurationManager.AppSettings["database"];
	public static readonly string user = ConfigurationManager.AppSettings["user"];
	public static readonly string password = ConfigurationManager.AppSettings["pwd"];
	//数据库连接字符串(app.config来配置),可以动态更改connectionString支持多数据库.
	//public static readonly string connectionString = ConfigurationManager.AppSettings["OraConnString"];
	public static readonly string connectionString = $"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={oracleServer})(PORT=1521))(CONNECT_DATA=(SERVICE_NAME={dataBase})));User Id = {user}; Password={password};";
	/// <summary>
	/// 利用委托封装的Oracle访问通用类
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <param name="sql"></param>
	/// <param name="func"></param>
	/// <returns></returns>
	private static T Execute<T>(string sql,Func<OracleCommand,T> func)
	{
		using (OracleConnection conn = new OracleConnection(connectionString))
		{
			using (OracleCommand cmd = new OracleCommand(sql, conn))
			{
				conn.Open();
				OracleTransaction transaction = conn.BeginTransaction();
				try
				{                        
					T tResult = func.Invoke(cmd);
					// 提交数据
					transaction.Commit();
					return tResult;
				}
				catch (OracleException ex)
				{
					// 出现异常是回滚
					transaction.Rollback();
					throw new Exception(ex.Message);
				}
			}
		}
	}
	/// <summary>
	/// 执行一条计算查询结果语句,返回查询结果
	/// </summary>
	/// <param name="sql"></param>
	/// <returns></returns>
	public static object ExecuteScalar(string sql)
	{
		Func<OracleCommand, object> func = new Func<OracleCommand, object>(
			cmd => {
				return cmd.ExecuteScalar();
			}
		);
		return Execute<object>(sql,func);
	}

	public static int ExecuteNonQuery(string sql)
	{
		Func<OracleCommand, int> func = new Func<OracleCommand, int>(
			cmd => {
				return cmd.ExecuteNonQuery();
			}
		);
		return Execute<int>(sql, func);
	}
	/// <summary>
	/// 查询数据
	/// </summary>
	/// <param name="sql"></param>
	/// <returns></returns>
	public static DataSet Query(string sql)
	{
		Func<OracleCommand, DataSet> func = new Func<OracleCommand, DataSet>(
			cmd => {
				DataSet ds = new DataSet();
				OracleDataAdapter adapter = new OracleDataAdapter(cmd);
				adapter.Fill(ds, "data");
				return ds;
			}
		);
		return Execute<DataSet>(sql, func);
	}
}

4、测试

// 1、执行一条计算查询结果语句,返回查询结果
string sql = $"select count(1) from staff_dict";
object rows = OracleHelper.ExecuteScalar(sql);
Console.WriteLine(rows);
Console.ReadKey();

// 测试更新
string sql = "update staff_dict t set t.status = 1 where t.emp_no = '0650'";
int rows = OracleDbHelper.ExecuteNonQuery(sql);
Console.WriteLine(rows);
Console.ReadKey();

// 测试查询
string sql = "select * from staff_dict t where t.emp_no like '065%'";
DataSet data = OracleDbHelper.Query(sql);
Console.WriteLine(JsonConvert.SerializeObject(data));
Console.ReadKey();

标签:string,委托,数据库,cmd,static,sql,Oracle,new,public
来源: https://www.cnblogs.com/his365/p/16495837.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有