使用 ODP.NET 访问 Oracle

基于odp.net的oraclehelper 可以使用存储过程返回数据集 http://download.csdn.net/source/2247281 对于asp.net访问oracle数据库,微软已经再支持data.oraclecliet,意见使用odp.net来访问oracle了哦。比data.oraclecliet访问数据库效率更高的odp.net,使用微软的oraclehelper改写得到 ------------- 非常感谢 xifenfei 提供的文件,但在使用不法使用存储过程返回数据集,特做了修改 立即下载

使用 ODP.NET 访问 Oracle

作者: Robert P. Lipschutz 和 Gregg D. Harrington

现在 .NET 开发人员可利用 Oracle 的本地数据访问来改进应用程序的性能。

要想从 Oracle 所支持的企业应用程序获得预期的响应性能和高级数据库特性,应该选择 Oracle 专用的连接而不是一般的数据库连接。Java 开发人员长期以来一直可以选择使用 Oracle 提供的专用 API 连接到 Oracle 数据库,这些 API 扩展了 JDBC 并为开发人员利用如大型对象 (LOB) 和 Ref Cursor 这样的 Oracle 高级特性提供了一条途径。

2002 年 2 月,Microsoft 推出了 Visual Studio .NET 及其三种语言(C# .NET、Visual Basic .NET 和 C++ .NET)以及底层的 .NET 框架。Microsoft .NET 为建立企业级的桌面、Web 和 client/server 应用程序提供了一个面向对象的开发平台。不幸的是,使用这些 Microsoft 语言和 .NET 框架的开发人员并没有一个现成的、专用于 Oracle 的数据库连接选项。

针对这一问题,Oracle 为 .NET (ODP.NET) 专门编写了 Oracle Data Provider,一个用于 Microsoft .NET 环境下的 Oracle 数据库访问 API。在本文中,我们将讨论 ODP.NET 的用法、特性和对性能的改善。我们发现使用 ODP.NET 确实具有一些显著的优势。

ODP.NET 的基本知识

我们在 Microsoft Visual Studio .NET 中使用专用于 Oracle 数据库连接的 ODP.NET,建立了一个简单的 C# 应用程序(名为 dejavu);完整的源代码位于 列表 1 和列表 2 中。这一应用程序及其附带的数据库将作为本文所有示例的一个基础。

数据库中的每条记录都包括一个员工的相关信息。这一应用程序使用带有四个字段的基本表,表 1 对此进行了概述。

您会发现使用 ODP.NET 进行连接或使用基本的 INSERT 和 SELECT 语句相对要容易些;这些任务与 JDBC 或 OLE DB .NET 同类产品非常相似。在编写 dejavu 的时侯,我们首先执行了一些基本步骤以便可以使用 ODP.NET:

 

  1. 安装 ODP.NET 软件。
  2. 在 Visual Studio 的 Solution Explorer 中,添加一个对 Oracle.DataAccess DLL 的引用。
  3. 在 C# 类中,通过在源代码文件的最上面使用子句(using Oracle.DataAccess.Client; 和 using Oracle.DataAccess.Types; )添加了两个命名空间(如果您正在使用 Visual Basic .NET 或其他与 .NET 兼容的语言,则添加命名空间的语法可能会略有不同)。

 

一旦可以使用 ODP.NET,就可以执行下面的步骤来完成一个基本的插入操作:

 

  1. 创建和打开一个数据库连接。
  2. 创建一个命令。
  3. 执行命令。

 

首先,创建和打开一个数据库连接:

 

OracleConnection dbConn = new OracleConnection(
	"Data Source=" + txtDataSource.Text + ";" + 
	"User Id=" + txtUsername.Text + ";" + 
	"Password=" + txtPassword.Text + ";");
dbConn.Open();

 

然后使用 OracleConnection object 建立对数据库的一个连接。每当创建该对象的一个实例,就要提供一个连接字符串。OracleConnection 对象使用此字符串定位到相应的 Oracle 数据库服务器,并进行认证。

在这个例子中,连接字符串有三个连接参数:Data Source、User Id 和 Password。由于 Oracle Data Provider 使用了 Oracle 调用接口 (OCI),因此 Data Source 将是 Oracle 客户端软件所用 tnsnames.ora 文件中的一个有效 TNS 名。User Id 是指定的 Data Source 的有效用户名。最后,Password 是与所提供的 User Id 相匹配的密码值。

然后,打开连接,方法是对 OracleConnection 对象调用 Open() 方法, 并创建一个 OracleCommand 对象(该对象与已创建的 OracleConnection 对象相关联):

 

OracleCommand cmd = new OracleCommand(
	"insert into dejavu_employee values " + 
	"(1, 'Gregg D. Harrington', empty_blob())", dbConn);

 

在创建 OracleCommand 对象的时侯,需要提供带有两个参数的构造符。第一个是希望执行的 SQL 命令;这可以是用字符串所写的任意有效的 SQL 语句。在这个例子中,准备在 DEJAVU_EMPLOYEE 表中插入一个员工。第二个参数是连接到数据库的 OracleConnection 对象。

最后,执行 OracleCommand 对象:

 

int rows = cmd.ExecuteNonQuery();
ShowInfo(rows + " where added to the 
database");

 

在这个例子中,要在数据库中插入一行数据,因此我们将使用 ExecuteNonQuery() 方法。在不需要查询返回任何行时(比如 SQL 的 INSERT、UPDATE 或 DELETE 语句)就可以使用这个方法(使用 ExecuteReader() 用于 SELECT 语句)。ExecuteNonQuery() 方法接收所构造的 SQL 语句,将其送到数据库执行,并返回操作涉及到的行数。

现在,让我们来读取刚刚插入到数据库中的记录并向用户显示相应的列名。将使用现有的连接和命令目标,而不是建立新的数据库连接。

要更改 SQL 语句,可根据想要执行的新的 SQL 语句更改 OracleCommand 对象的 CommandText 属性:

 

cmd.CommandText = "select * from dejavu_employee where " + 
"id = 1";

 

如果想要使用单一的数据库连接在单一的 OracleCommand 对象中执行多个 SQL 语句,这一技术就特别有用。

下面,执行该命令并读取结果:

 

OracleDataReader reader = cmd.ExecuteReader();
reader.Read();
ShowInfo("The selected user's name was " + 
	reader["name"].ToString());
dbConn.Close();

 

我们在此看到一个新对象,OracleDataReader。该对象用于读取一条或多条记录。在给出的示例中,由于我们是在主关键字列中查找一个特定值,因此只返回一条记录。 ExecuteReader() 返回一个包含生成的一条或多条记录的 OracleDataReader 对象。

一旦有了 OracleDataReader 对象,就可以获得想要的数据了 — 在这个例子中,就是姓名这一列。在开始创建 OracleDataReader 的时侯,该对象不是放置在第一条记录的位置,因此有必要在读取第一条记录之前,调用 Read() 方法。 如果之后还有相应的记录,则 Read()方法会移动到下一条记录并返回一个为真的布尔值。

下面,我们要使用 OracleDataReader 对象缺省的字符串数组属性检索姓名列的值,传递所要列的名称 — 在这个例子中,就是姓名。最后,我们另外通过对 OracleConnection 对象调用 Close() 方法关闭这个连接。

比较基本的 ODP.NET 类和与之相当的类

用于 ODP.NET 中的基本类与用于其他连接选项中的基本类非常相似。虽然方法名称和执行有时也会不太一样,但基本的逻辑都是一样的。表 2 列出了一些典型的数据库操作,以及 ODP.NET、OLE DB .NET 和 Oracle 瘦 JDBC 驱动器处理这些操作时用到的对象。

ODP.NET 高级特性

至此我们已经了解了一些基本知识,下面让我们来仔细了解使得 ODP.NET 如此强大的一些特性:对 LOB 和 Ref Cursors 的处理。

Oracle LOB、BLOB 和 Bfile。 Oracle LOB 用于存储各种大型的字符或二进制数据,包括图片和文本文档。ODP.NET 提供本地方法检索和管理 LOB,这样就改进了处理 LOB 的代码性能,并使得编写这一代码的过程对于开发人员来说变得更为简单。

ODP.NET 包含了 OracleBlob 和 OracleClob 对象。这些对象扩展了 System.IO.Stream 对象的功能。这些数据类型使得开发人员用较少的性能开销,便可实现 LOB 到数据库的简单读写。

为了展示 ODP.NET 处理 BLOB (二进制大对象)和 CLOB (字符型大对象)的能力,我们将逐步演示一个简单的示例。在这个例子中,我们将打开一个照片文件并将其写入到数据库中。对于这一过程的前两步(创建和打开一个数据库连接,并创建一个命令)使用上面例子所示的相同方式来完成。

下面,我们必须创建一个事务:

 

OracleTransaction trans = dbConn.BeginTransaction();

 

在更新某个 BLOB 的时侯,需要执行完一个事务中的所有操作以便维护数据的完整性(如果正要准备检索一个 BLOB 数据库对象,则不需要创建一个事务)。要创建一个本地事务,调用 OracleConnection 对象的 BeginTransaction() 方法。这样就返回了一个 OracleTransaction 对象,我们将该对象指定给一个变量以备以后使用。

现在,我们打开该记录并获得 OracleBlob 对象:

 

cmd.CommandText = "select * from dejavu_employee where " + 
	"id = 1 for update";

OracleDataReader reader = cmd.ExecuteReader();
reader.Read();
OracleBlob lob = reader.GetOracleBlob(2); // ordinal position of blob

 

我们检索 OracleBlob 对象,并将其注入照片文件中。首先,我们选择想要的记录 — 在这个例子中,就是 ID 号为 1 的员工记录。由于我们将更新这个 BLOB,所以数据库的行必须是锁定的。我们通过在 SELECT 语句中使用更新子句来执行这一操作。

下面,我们打开一个 OracleDataReader 并调用 Read() 方法移动到第一条记录。最后,我们从 OracleDataReader 中获得 OracleBlob 对象。这一操作使用 OracleDataReader.GetOracleLob() 方法来完成。

现在,我们就可以将照片放到服务器上了,如列表 3 所示。应用程序会提示用户输入想要上载到数据库中的文件名。对于这个任务,我们在 Visual Studio 表单设计器中创建的一个 OpenFileDialog 对象 (在我们的例子中就是 ofdPicture)。下面,我们用 System.IO.FileStream 对象打开文件,然后继续从 FileStream 对象中将数据复制到 OracleBlob 对象。后者使用一个 WHILE 循环通过 Read() 和 Write()方法来实现。

使用 OracleClob 对象和使用 OracleBlob 对象是非常相似的。在读取 CLOB 数据库对象时,可以使用 OracleClob 对象从数据库读取字符型数据。OracleClob 对象覆盖 Read() 方法,并向开发人员提供使用 CLOB 置入一个字符数组或字符串的方法。

ODP.NET 还提供一个和 OracleBlob 类似的对象,用于从 Oracle 数据库中读取 BFile 数据库。Bfile 是存储在数据库之外文件系统中的 LOB,对于存储特别大的文件非常有用。

Ref Cursor 和存储过程。可以通过存储过程打开 Ref Cursor,并通过一个输出参数将其传送到应用程序。

要更好地理解 Ref Cursor 在 ODP.NET 中的用法,可以迅速浏览列表 4 中的 PL/SQL 代码。这段代码根据输入参数 n_empid 和 n_empid2,从DEJAVU_EMPLOYEE 表中检索到两条记录。然后通过输出参数 io_cursor 和 io_cursor2 返回 Ref Cursor。

开发人员会发现使用 ODP.NET 编写 Ref Cursor 非常容易,因为他们可以使用游标的输出参数(如 io_cursor 和 io_cursor2),如同 OracleDataReaders 一样。要检索某个 Ref Cursor,需要首先打开一个数据库连接,如同第一个示例中所示。下面,我们要创建一个命令调用存储过程并传递必要的参数,如列表 5 所示。在这个列表中,我们使用一个已熟悉的对象(即OracleCommand)来调用存储过程并获得结果 Ref Cursor。但是,我们使用存储过程的输出参数,而不是使用 SQL 语句从数据库中获得记录。

让我们逐步演示一下列表 5 中的过程。首先,在第 1 行,我们创建一个新的 OracleCommand 对象。但是,我们是通过提供存储过程的名称来调用该存储过程,而不是使用包含 SQL 语句的一个字符串 — 在我们的例子中,就是 curspkg.open_two_cursor。

下面,在第 2 行,我们将 OracleCommand 对象指定为存储过程调用,而不是 SQL 语句调用。要指定这个命令是调用存储过程,必须正确地指定 OracleCommand 对象的 CommandType 的属性。 CommandType 属性有很多可接受的值,可以通过 CommandType 枚举对象访问这些值。在这个例子中,我们使用 CommandType.StoredProcedure。

第 3 行和第 4 行创建了两个必需的参数变量以便访问返回的 Ref Cursor。我们将使用这些变量从数据库的存储过程获得对 Ref Cursor 结果的引用。

第 5 行到第 8 行向 OracleCommand 对象添加四个必需的参数。我们为 cmd.Parameters.Add() 方法同一行中的两个 n_empid 参数创建 OracleParameter 对象。

OracleParameter 构造符接收两个参数。第一个是 PL/SQL存储过程参数名;这就意味着可以灵活地添加参数,而不是按照声明存储过程参数的顺序添加。第二个参数是 PL/SQL 存储过程参数(即 Value 属性)应该被解释成的数据类型; Value 参数的可接受类型位于 OracleDbType 枚举对象中。这两个构造符参数同时告诉 OracleParameter 和 OracleCommand 对象如何调用存储过程,以及如何解释从该存储过程返回的值。

接下来的步骤

下载 ODP.NET
/global/cn/tech/windows/odpnet

ODP.NET 示例代码
/global/cn/sample_code/tech/windows/odpnet

参加 ODP.NET iSeminar
oracle.com/iseminars
使用 Oracle Data Provider for .NET

在我们的示例中,我们向 OracleCommand 对象添加了四个 OracleParameter 对象。其中的两个是 n_empid 和 n_empid2 输入参数,这两个参数是 OracleDbType.Int64 类型,用于 open_two_cursor 存储过程。我们还需要使用 OracleParameter 对象的 Value 属性,将参数的值分别设为 1 和 2。

第三个和第四个参数是 open_two_cursor 存储过程的输出参数。在这个例子中,就是 io_cursor 和 io_cursor2。对于 io_cursor 参数,我们并不向存储过程传递某个值,而是希望存储过程能返回一个 Ref Cursor。要处理这一步,我们添加一个 OracleParameter 对象作为OracleDbType.RefCursor 类型。要让 OracleCommand 对象知道这是一个输出参数,需要将 OracleParameter 对象的 Direction 属性设置为 ParameterDirection.Output。

下面,执行存储过程并检索结果,如列表 6 所示。在该列表的第 1 行,我们对 OracleCommand 对象调用 ExecuteNonQuery() 方法。该方法调用存储过程并将结果读回到正确的 OracleParameter 对象。

在第 2 行和第 3 行,我们将返回值抛入到 OracleRefCursor 对象。在 ODP.NET 执行回传某个值的存储过程时,会将那些值存储在与之相关联的 OracleParameter 对象的 Value 属性中。

从第 4 行到第 9 行,我们创建 OracleDataReader 对象,将它们设置为 Ref Cursor 结果,调用 Read() 方法移动到第一个记录,并从 OracleDataReader 对象中检索姓名列。

OracleDataReader 对象还包含了一个名为 NextResult() 的方法,该方法可以与方法 ExecuteReader() 联合使用,顺序地迭代来自存储过程的所有 Ref Cursor 结果。利用 NextResult() 方法,我们仅需要使用一个 OracleDataReader 对象来访问所有的 Ref Cursor。然而,这样做会限制我们顺序地访问 Ref Cursor。访问多个 Ref Cursor 结果所使用的方法将取决于应用程序的需要。

结论

Oracle Data Provider for .NET提供一个易于使用的、强大的 API,并且与 OLE DB .NET 相比,性能得到巨大的改善。如果希望在 .NET 框架中开发应用程序访问新的和现有的 Oracle 数据库,那么熟悉这一技术会使您的工作更轻松。

Robert P. Lipschutz (rob@thing7.com) 是 Thing 7 的总裁,该公司擅长编写技术白皮书和设计原型,而 Gregg D. Harrington (gregg@thing7.com) 是 Thing 7 的高级设计师。

Table 1:DEJAVU_EMPLOYEE table

 

字段类型目的
IDNUMBER(10)保留员工的 ID(这是该数据库的主关键字)
NAMEVARCHAR2(32)保留员工的姓名
PHOTOBLOB保留员工的照片
BIGNUMBERNUMBER(38,37)保留一个高精度数字

Table 2:比较几种常用 Oracle 连接的
基本选项命令

 

操作ODP.NETOLE DB .NETORACLE 瘦 JDBC 驱动器
连接到OracleConnectionOleDbConnectionOracleConnection database
创建 SQLOracleCommandOleDbCommand OracleStatement commands
读取数据OracleDataReaderOleDbDataReaderOracleResultSet

Microsoft's .NET Framework Data Provider for Oracle

Microsoft 也发布了一个 Oracle 专用的数据库驱动器,名为 .NET Framework Data Provider for Oracle。由于针对 .NET 的 Oracle 数据库的连接极其重要,因此 Oracle 和 Microsoft 都来处理这一问题就不足为奇了。正如 Oracle 的 ODP.NET 一样,Microsoft 的产品比 OLE DB .NET提供更多 Oracle 专用的功能和更好的性能。然而,Microsoft 的提供程序总得来说还是不如 ODP.NET 的功能多。

例如,ODP.NET API 可以支持事务保存点、本地 Ref Cursor 数据类型、代理服务器用户认证和全球化特性。Microsoft 的解决方案提供了一个 OracleLob 对象,该对象以相同的方式控制所有的 Oracle LOB 数据库。然而,ODP.NET 对 Oracle BLOB 和 CLOB 数据库对象都提供特定的对象。这就意味着 ODP.NET 对这些 Oracle 数据类型提供更好的支持。例如,OracleClob 对象可覆盖 read 方法置入一组字符数组。这一特性在处理 Unicode 和其他多字节字符时特别有用。

Microsoft 的解决方案和 ODP.NET 都比 OLE DB .NET 提供更好的数据库访问性能,最显著的是写操作和 LOB 操作。Microsoft 计划将其新版本的 .NET Framework Data Provider for Oracle 包含在 Visual Studio .NET 的下一个发布版中。

Python爬虫实战:东方财富股吧与雪球舆情数据实时爬取与情绪指标挖掘 本文详细介绍如何使用Python爬虫技术实时爬取东方财富股吧和雪球平台的讨论数据,结合股价波动构建情绪分析指标。我们将使用最新的异步爬虫技术、自然语言处理方法和可视化工具,为量化交易提供数据支持。文章包含完整的代码实现和技术细节,适合有一定Python基础的读者学习。 阅读详情

相关推荐

别再只盯着内存溢出了!从Unity崩溃日志中揪出AssetBundle.LoadAsset_Internal的真凶

本文深入解析Unity崩溃日志中AssetBundle.LoadAsset_Internal错误的真实原因,帮助开发者超越内存溢出的表象,识别文件损坏、热更新陷阱等核心问题。通过日志分析技巧、最佳实践和高级调试方法,提供系统化的解决方案,确保Unity资源加载的稳定性。

weixin_42676824的博客 250

(原) ODP.NET 演示通过存储过程的参数获取OracleClob数据

usingSystem; usingSystem.Data; usingSystem.Text; usingOracle.DataAccess.Client; usingOracle.DataAccess.Types; namespaceSample33 { //演示通过存储过程的参数获取OracleClob数据 classProgram ...

weixin_30294021的博客 172

【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析

Elasticsearch的Master选举机制是其分布式架构的基石,确保集群高可用性和数据一致性。通过多数派协议,节点间交换信息并投票选举Master,以维护集群状态和处理请求。该机制自动处理故障转移,保障服务连续性。

weixin_40736233的博客 1774

使用ODP.Net 可以实现.Net 程序以SYSDBA 身份访问数据库

Oracle ODP.NET数据库访问连接字符串 Connection String Attribute 默认值 描述 Connection Lifetime 0 Maximum life time (in seconds) of the connection 当数据库连接被返回到连接池中时,它的创建时间将与当前时间比较,如果超过了 Conn...

weixin_33895657的博客 198

Word毕业论文排版:图片和表格题注的终极指南(含自动编号技巧)

本文是Word毕业论文排版中图片和表格题注的终极指南,详细讲解了如何利用题注功能实现自动编号,告别繁琐易错的手动操作。核心内容包括创建定制标签、配置带章节的编号格式、插入交叉引用以及一键更新全文编号的技巧,旨在帮助学生构建自动化文档体系,提升排版效率和论文严谨性。

weixin_29211309的博客 1094

Vmware虚拟机克隆详解:固定ip + 修改uuid等内容

分两大步 设置固定ip 克隆后修改相关配置 本文引用的其他地方的图片。会附上链接 若侵权,删 一、设置静态ip 先进行虚拟网络的编辑 接下来的操作需要管理员权限。(给权限就完事了) 接下来设置网卡: 网络和共享中心→ 更改适配器设置→VMware Network Adapter VMnet8 -> 右键属性 修改TCP/Ipv4的配置,网上常见是这种,笔者是英文的...

Unknownfuture的博客 9070

ODP.NET调用存储需要使用事务

今天发生在用ODP.NET调整一个存储过程时发生了两个奇怪的错误。 ORA-08103: object no longer exists ora-01410: invalid rowid 网上都说是索引块有错误什么的,我索引也重建,表也重建了,但还是不行。 奇怪的是我直接测试存储过程是有结果的。 后来发现是存储过程中使用了临时表,而我在代码中又没有使用事务,当我加上事...

weixin_30245867的博客 313

Win10 + Linux 双系统删除(Linux)

删除Linux所使用的磁盘分区 进入此电脑->计算机->管理->磁盘管理

weixin_52247624的博客 943

使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解

1,什么是ODF .NE,?就是Oracle 为 .NET (ODP.NET) 专门编写了 Oracle Data Provider,一个用于 Microsoft .NET 环境下的 Oracle 数据访问 API 。 详细解说 http://www.oracle.com/technetwork/cn/testcontent/o23odp-084525-zhs.html 对于官方的代码,已不存在...

weixin_34111790的博客 435

C#实现低通和高通滤波算法

低通滤波器允许通过低于某个截止频率的信号成分,并且抑制高于该频率的成分。而高通滤波器则允许通过高于某个截止频率的信号成分,并抑制低于该频率的成分。巴特沃斯滤波器是一种对称的滤波器,具有平坦的幅度响应和最小的群延迟。低通和高通滤波是数字信号处理中常用的滤波技术,用于滤除或增强信号中的特定频率成分。在本篇文章中,我们将使用C#编程语言来实现低通和高通滤波算法。以上就是使用C#实现低通和高通滤波算法的示例代码。你可以根据自己的需求调整截止频率和采样率,将这些代码应用于你的项目中。是滤波器的截止频率,

XisVisual_Basic的博客 1274

物理AI重构自动驾驶供应链 | 传统Tier1盈利模式崩塌,纯算法/软硬一体双路线落地对比,助力智驾软件商业化与全场景模型迭代

2026年是自动驾驶物理AI规模化落地元年,行业彻底告别传统感知-预测-规划-控制的模块化分层开发范式,迈入以世界模型、物理规则推演、端到端动作生成为核心的全新技术阶段。不同于传统AI仅完成图像识别、目标检测的浅层感知任务,物理AI能够深度理解道路交通中的动力学约束、路面摩擦、车辆博弈、行人运动规律等真实物理逻辑,实现对复杂路况的时序推演与自主决策,从底层重构自动驾驶技术架构。技术迭代同步引发产业链颠覆性变革,沿用数十年的传统自动驾驶Tier1商业模式全面崩塌。

getusushu的博客 288

.net中使用ODP.net访问Oracle数据库(无客户端部署方法)

ODP.net是Oracle提供的数据库访问类库,其功能和效率上都有所保证,它还有一个非常方便特性:在客户端上,可以不用安装Oracle客户端,直接拷贝即可使用。 以下内容转载自:http://blog.ywxyn.com/index.php/archives/326 由于微软在.net framework4中会将System.Data.OracleClient.dll depreca

rrrrssss00的专栏 4万+

避坑指南!YOLO26模型导出/推理常见问题,99%的开发者都踩过

版本锁定:Ultralytics=8.4.2、OpenVINO=2024.0.0、Python=3.10,版本不一致是80%问题的根源;参数对齐:训练/导出/推理的imgsz、归一化、坐标映射必须完全一致,差一步就出错;算子统一:避免自定义算子,优先用YOLO26原生算子(C3k2/PSABlock),确保推理引擎兼容;分步验证:导出后先校验ONNX/IR模型→单图片推理→RTSP流推理→72小时稳定性测试,一步过易踩坑;工业级测试。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 510

使用OracleClient,OLEDB,ODBC,Visual Studio,ODP.NET 来连接 Oracle访问数据库

---下面是OracleClient 下面也要介绍的是通过 System.Data.OracleClient 来完成 ASP.NET 页面访问 Oracle 数据库, 其实呢,还是比较简单的, 首先介绍一下环境吧, 我机器装的是 Oracle 10g R2 的版本, 要完成 ASP.NET 访问 Oracle 事实上,对 Oracle 还是有一些设置的, 看下面的一个截图里面的两...

weixin_30639719的博客 216

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

在开发框架中扩展微软企业库,支持使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库

在前面随笔《在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动》中介绍了在代码生成工具中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,如果我们在框架应用中需要使用这个如何处理了...

爱无止 397

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用OracleClient,OLEDB,ODBC,Visual Studio,ODP.NET 来连接 Oracle访问数据库

下面也要介绍的是通过 System.Data.OracleClient 来完成 ASP.NET 页面访问 Oracle 数据库, 其实呢,还是比较简单的, 首先介绍一下环境吧, 我机器装的是 Oracle 10g R2 的版本, 要完成 ASP.NET 访问 Oracle 事实上,对 Oracle 还是有一些设置的, 看下面的一个截图里面的两个文件吧

xwnxwn的专栏 1539

使用 ODP.NET 访问 Oracle 数据库

要相使用 Oracle Data Provider For .NET(ODP.NET), 必须先安装 ODP.NET 或者是 ODAC(Oracle Data Access Components) (ODAC 中包含 ODP.NET 这个组件) 最好是把 ODT.NET 也安装上,这样,以后在 Visual Studio 中开发 Oracle 应用程序会方便很多的, 还是提

Prostones的专栏 1030
上一篇: Oracle Data Provider for .NET
下一篇: odp使用笔记
leaf829
博客等级 码龄21年 7粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值