Tag: oracle

如何在app.config上使用加密连接字符串与Windows窗体上的向导生成的Dataset.xsd

我正在使用Visual Studio 2013(.NET 4.5)和Oracle Developer Tools最新版本开发 MDI应用程序。 我需要创建一个主窗体,然后它将成为许多不同forms的容器,每个窗体都是不同的应用程序。 应用程序必须连接到不同的Oracle数据库,现在我正在尝试设置主窗体以保持所有连接字符串的加密,并可能在单独的文件上。 现在连接字符串只有一个。 为了加密连接字符串,我使用了那些文章中描述的aspnet_regiis方法: Framework 4.0中的Web配置加密/解密 使用受保护的配置加密配置信息 总结一下: 我在app.config中添加了部分,我在其中定义了自己的RSA提供程序和密钥容器,因为我需要在多台计算机上导出和导入密钥。 然后我创建了密钥容器并将其与aspnet_regiis工具一起使用来加密部分。 我还为TNS_ADMIN变量设置了部分,以使用我自己的Oracle Instant Client和我的自定义tnsnames.ora文件。 这将有助于避免不同的机器操作系统和Oracle客户端版本和配置出现问题。 所以,现在这是我的最终app.config文件应该是这样的: Rsa Key ZuB8jsXnXR/6Ww47R4Oc/ksSgHsrRuuOkNypbsdfm1ASDlvdsklsgfhtrwaADFHrywswvfhgnjlsGHSDJKFEROvfsd/TV+LKlysPkccEXmJFCcFZ7S9geSInPBaNvYGweR9FcTK1HVcrYMaddgfBK6lpSTTw6cdMRIOcw0Ib//oYPr34= 01old8NrGlRAOLdfdtXUKYuBkZPY5XbWMI/j22Hnm8U= 现在我需要使用数据源配置向导来设置Oracle数据集,然后能够将表从DataSource Explorer拖放到自动创建导航按钮并保持表之间关系等的表单。 但是当我使用原始app.config在新应用程序上使用向导完成配置时,它要求我创建一个ConnectionString并将其存储在app.config ,然后副本也放在Settings.settings文件中, 显然用纯文本 。 如果我执行上述过程来加密原始app.config的部分,那么只有 在 Settings.settings 存在 ConnectionString 设置时 , DataSet.xsd 才有效 。 它不使用app.config参数。 我试图打开DataSet.Designer.cs文件,但是为每个TableAdapter对象指定了Connection和ConnectionString参数,因为我的数据集中有很多表,所以我想避免使用查找/替换方法…因为如果我需要对数据集进行一些更改,那么DataSet.xsd文件可能会被覆盖,因此所有编辑都将丢失。 我想知道哪个是替换连接字符串的最佳方法,而是使用加密字符串。 最后,我还想知道是否可以在保存加密的同时将部分移动到另一个.config文件。 – 编辑 – 我做了一些更多的测试来重新创建一个新的应用程序项目,而Visual Studio似乎比我想象的更聪明! 在使用向导设置新数据源后,我将第一个连接字符串添加到空白app.config 。 然后我编辑了app.config并将部分移动到新的connections.config文件。 我应用aspnet_regiis方法来加密该部分,一切正常。 […]

validationoracle数据库连接的一些棘手的快速方法

我的WCF服务需要检查现在是否可用,我们可以使用它。 我们有很多远程dbs。 它们的连接有时很奇怪,不能用于查询数据或其他。 因此,例如,这是使用的常规连接字符串: User Id=user;Password=P@ssw0rd;Data Source=NVDB1;Connection Timeout=30 这是服务方法,用于获取 public List GetAliveDBs(string city) { if (String.IsNullOrEmpty(city)) return null; List cityDbs = (from l in alldbs where !String.IsNullOrEmpty(l.Value.city) && l.Value.city.ToUpper() == city.ToUpper() select l.Value.connString).ToList(); // There is no such city databases if (cityDbs.Count == 0) return null; ReaderWriterLockSlim locker = new ReaderWriterLockSlim(); Parallel.ForEach(cityDbs, p => { […]

有没有办法使用DBMS_Alert通知Winform应用程序数据库更改

我正在尝试使用Oracle 10g获取winform应用程序以刷新数据库更改的嵌入式浏览器。 唯一的问题是我不被允许使用数据库更改通知。 我很好奇是否有人有办法使用DBMS_Alert的内置包并且在数据库更改时对winform应用程序进行了一些操作。 谢谢,安德鲁

ODP.NET连接池:如何判断是否已使用连接

我正在修改Winforms应用程序以使用连接池,因此可以在后台线程中进行数据访问。 业务逻辑在PL / SQL中实现,并且为了利用业务逻辑,必须调用几个与安全相关的存储过程。 我需要的是一种方法来判断连接是否在没有往返数据库的情况下使用。 我不认为我可以在HashSet跟踪它们,因为我怀疑Equals甚至可以依赖ReferenceEquals 。 有任何想法吗? 编辑: 为了清楚起见,我计划使用ODP.NET的内置连接池机制。 如果我滚动自己的连接池,跟踪哪些连接是新的与使用的将是非常微不足道的。

使用odp.net连接到Oracle,使用C#连接OCI

我一直在阅读如何从我的C#win应用程序连接到我的oracle数据库,但我一直在“撞墙”。 我决定使用odp.net和OCI,这样客户端计算机不需要安装客户端,但我无法让它工作。 我有一个小的测试应用程序,我在下面显示的代码,在我的解决方案中,我从oracle OCI添加了以下dll:oci.dll,orannzsbb11.dll和oraociicus11.dll。 它们都与最终的.exe文件放在一起。 测试代码: private static string CONNECTION_STRING = “User Id=hr;Password=hr;Data Source=(DESCRIPTION=” + “(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))” + “(CONNECT_DATA=(SID=XE)));Connect Timeout=15;”; static void Main(string[] args) { try { using (var conn = new OracleConnection(CONNECTION_STRING)) { conn.Open(); Console.WriteLine(“Connection is: {0}”, conn.State.ToString()); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } 问题发生在using(…)语句中,程序停止工作,我没有得到任何响应。 为了让OCI工作,我需要做些什么?

使用uint数据类型的ODP .NET参数问题

从本机.NET oracle数据提供程序更新到Oracles ODP.NET后,我遇到了以下问题。 我有一个存储过程是包的一部分,它接受32个参数,所有IN只有一个,指定为OUT参数。 无论如何,这是我遇到的问题。 我有一个日期参数作为varchar2传入,然后3个其他参数也是varchar2。 至于其余部分,它们都是NUMBER类型。 在我的.NET代码中,传递给存储过程的所有值都是字符串或int,有4个例外。 我有4项UInt32类型的数据。 它们持有的值对于int来说太大了,因此使用了uint。 这是问题所在。 当我们使用本机.NET oracle数据提供程序时,参数构造函数包含OracleType.Number的数据类型,现在oracle参数构造函数具有OracleDbType.Int32和OracleDbType.Int64。 当设置为数据类型OracleType.Number的参数值时,uint数据类型没有问题,但现在使用新客户端,根据我使用的数据类型,我会得到不同的错误。 (顺便说一句,当我传入的值调用时,存储过程运行正常。这些exception都发生在Oracle Command对象实例的ExecuteNonQuery语句中。) 我使用以下组合更改了保存我的值以及参数的数据类型的数据类型。 以下是各自的结果。 .NET数据类型‘uint’ODP .NET参数数据类型‘OracleDbType.Int32’ * System.OverflowException:对于Int32,值太大或太小。 在Oracle.DataAccess的Oracle.DataAccess.Client.OracleParameter.PreBind_Int32()的System.Convert.ToInt32(对象值)的System.UInt32.System.IConvertible.ToInt32(IFormatProvider提供程序)的System.Convert.ToInt32(UInt32值)处ScoutLoaderService.EventLoader.Load()*中的Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()中的.Client.OracleParameter.PreBind(OracleConnection conn,IntPtr errCtx,Int32 arraySize) .NET数据类型‘uint’ODP .NET参数数据类型‘OracleDbType.Int64’Oracle.DataAccess.Client.OracleException ORA-06502:PL / SQL:数字或值错误:字符到数字转换错误ORA-06512:在第1行在Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,OracleConnection conn,String procedure)中的Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx,OpoSqlValCtx pOpoSqlValCtx,Object src,String procedure,Boolean bCheck) ,在ScoutLoaderService.EventLoader.Load()*的Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery(),IntPtr opsErrCtx,OpoSqlValCtx * pOpoSqlValCtx,Object src,Boolean bCheck) .NET数据类型‘Int64’ODP .NET参数数据类型‘OracleDbType.Int64’Oracle.DataAccess.Client.OracleException ORA-06502:PL / SQL:数字或值错误:字符到数字转换错误ORA-06512:在第1行在Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,OracleConnection conn,String procedure)中的Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 […]

使用事务范围和查询

我正在使用oracle DB的entity framework。 我试图使用事务范围(因为我想要回滚的选项): using (TransactionScope ts = new TransactionScope()) { ….. } 问题是,当我尝试在using语句中查询时,会抛出exception: Unable to load DLL ‘oramts.dll’: The specified module could not be found. (Exception from HRESULT: 0x8007007E) 我怎么解决这个问题?

如何使用Oracle和.Net客户端实现密码更改function?

我正在使用Oracle用户来validation.Net应用程序的用户名和密码。 现在我正在研究密码更改function。 数据库具有自定义密码validation,因此,如果您尝试更改用户密码并提供无效密码,Oracle将返回多个错误。 第一个错误始终是“ORA-28003:指定密码的密码validation失败”,然后每次失败validation都会出现一个错误。 当我尝试从Toad客户端更改用户密码时,会正确显示。 但是,当我从我的应用程序执行此操作时,引发的OracleException仅返回第一个错误,因此我无法向用户显示他提供的新密码无效,这是应用程序的要求。 那我该怎么办呢?

我如何在oracle中将参数作为varchar2输出

我正在使用oracle 10g 这是我的包装规格和正文 CREATE OR REPLACE PACKAGE P_1 AS TYPE T_CURSOR IS REF CURSOR; PROCEDURE USP_1(SP_NUM OUT VARCHAR2); END P_1; CREATE OR REPLACE PACKAGE BODY P_1 AS PROCEDURE USP_1(SP_NUM OUT VARCHAR2) IS BEGIN SELECT to_char(concat(to_char(sysdate, ‘yyyymm’), to_char(“ActionId”.nextval, ‘000’))) INTO SP_NUM FROM dual; END USP_1; END P_1; 我的后端代码是 using (OracleConnection oracleConnection = new BaseRepository().Connection) { oracleConnection.Open(); […]

将OracleParameter与C#TimeSpan一起使用 – Literal不匹配

我进行了广泛的搜索,但我找不到任何关于此的例子。 我有一个类型为TimeSpan的.NET变量,我需要将它放入Oracle DB的IntervalDayToSecond记录中。 参考http://docs.oracle.com/html/B14164_01/featOraCommand.htm此页面,应该可以将TimeSpan对象作为OracleParameter传递,并将其插入到IntervalDayToSecond类型记录中的Oracle DB中。 这是代码: OracleParameter t = new OracleParameter(“PAR_T”, _msg.t); 我以各种方式尝试过,也明确指定了DBType(它不应该是必需的): OracleParameter t = new OracleParameter(“PAR_T”, _msg.t); taxi.OracleDbType = OracleDbType.IntervalDS; 我总是从Oracle得到同样的错误: Devart.Data.Oracle.OracleException:ORA-01861:literal与格式字符串不匹配 我无法理解如何使其发挥作用; 我在这个应用程序中使用了许多参数(类型为String , Integer , Date ),它们都在工作。 在Google上,我找不到使用c# TimeSpan作为参数的某个人的例子。 有没有人试过这个?