您的位置:首页 > 数据库 > Oracle

C# 使用OracleClient链接的新方式

2016-11-14 20:20 399 查看
目前根据网上的资料C#连Oracle数据主要有两种方式OracleClient和OleDB,不得不说这两种方式都非常古老了,更别说ADO.Net组件组件中的OracleClient已经被弃用了。

但是现在有了一种新的解决方案,那就是Oracle官方的OracleClient,而且用了它之后也不再需要单独的监听程序了。

下面是使用方法:

1.右键您的项目---管理NuGet程序包-搜索Oracle找到Oracle.ManagedDataAccess这个插件;



2.下面直接按照往常的通用方法写就可以了

           

/// <summary>
/// 连接字符串
/// </summary>
private static string connString = ConfigurationManager.AppSettings["DataSourceConnection"];
/// <summary>
/// 执行单条sql
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="paras">参数</param>
public static int Execute(string sql, OracleParameter[] paras)
{
int i = 0;
using (OracleConnection conn = new OracleConnection(connString))
{
try {
using (OracleCommand command = new OracleCommand
{
Connection = conn,
CommandText = sql
})
{
if (conn.State != System.Data.ConnectionState.Open)
conn.Open();

//添加参数
if (paras != null)
{
command.Parameters.AddRange(paras);
}

//这个调用将把参数数组传进SQL,同时写入数据库
i = command.ExecuteNonQuery();
command.Parameters.Clear();
}
}
catch (OracleException E)
{
throw new Exception(E.Message);
}
finally
{
conn.Close();
}
}
return i;
}

connString链接信息需要说明一下,这个地方跟SQLServer有显著不同:

Password=***;User ID=***;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=***)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=****)))

以下为执行事务的备忘:

public static bool ExecuteTran(List<ExecuteModel> models)
{
bool issuccess = false;
using (OracleConnection conn = new OracleConnection(connString))
{
try {
if (conn.State != System.Data.ConnectionState.Open)
conn.Open();
using (OracleTransaction tran = conn.BeginTransaction()) //开始数据库事务。即创建一个事务对象tran
{
using (OracleCommand cmd = new OracleCommand())
{
cmd.Connection = conn;
cmd.Transaction = tran; //获取或设置将要其执行的事务
try
{
foreach (var m in models)
{
cmd.CommandText = m.sql;
if (m.paras != null)
{
cmd.Parameters.AddRange(m.paras);
}
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
tran.Commit(); //如果两条sql命令都执行成功,则执行commit这个方法来执行这些操作。
issuccess = true;
}
catch (OracleException E)
{
tran.Rollback();//如果执行不成功,发送异常,则执行rollback方法,回滚到事务操作开始之前。
issuccess = false;
throw new Exception(E.Message);
}
}
}
}
catch (OracleException E)
{
throw new Exception(E.Message);
}
finally
{
conn.Close();
}
}
return issuccess;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: