在C#中执行一个返回参考游标的oracle函数
我有一个带有In Out参考光标的过程的Oracle软件包.我的理解是,这是非常标准的. 我不喜欢的事实是,我必须编写大量代码才能看到输出. 所以我问了这个问题,事实证明,我可以通过创建包装过程的函数来获得我想要的东西. 更新:看来我不再需要该功能,但是对于那些好奇的人来说,无论如何都可能知道原始的问题和回答更新. 这是功能 FUNCTION GetQuestionsForPrint (user in varchar2) RETURN MYPACKAGE.refcur_question AS OUTPUT MYPACKAGE.refcur_question; BEGIN MYPACKAGE.GETQUESTIONS(p_OUTPUT => OUTPUT, p_USER=> USER ) ; RETURN OUTPUT; END; 这是我在SQL开发人员中执行它的方法 var r refcursor
0 2024-04-15
编程技术问答社区
Oracle ODP.Net和EF CodeFirst-SaveChanges错误
有人可以帮助我: 代码: Role r = new Role { ID = 1, Name = "Members" }; ctx.Roles.Attach(r); //Saving User User u = new User { Login = login, Password = password, Status = 1 }; u.Roles.Add(r); ctx.Users.Add(u); ctx.SaveChanges(); 我要做的是保存具有现有角色的新用户.用户和角色类具有Fluent-api映射的多对多关系,如下所示: modelBuilder.Entity() .HasMany(u => u.Roles) .WithMany(r => r.Users) .Map(x => { x.ToTable("USER_ROLE_XREF", dbsch); x.MapLeftKey("ID_USER");
0 2024-04-14
编程技术问答社区
ODP.NET 如何向Oracle存储过程传递字符串数组?
有很多问题, 我有以下PL/SQL存储过程; PROCEDURE PS_test( Liste1 Listcar, Liste2 Listcar, P_CURS_MESSAGE out CURSOR_REF_TYP ) 其中类型Listcar如下: 类型ListCar是Varchar2(50); 的Varray(100) 这是我到目前为止尝试的: string[] list = { "name1", "name1" }; OracleParameter oParam = (OracleParameter)myOracleCommand.CreateParameter(); oParam.ParameterName = "Liste1"; oParam.UdtTypeName = "LISTCAR"; oParam.Value = list; oParam.Direction = ParameterDirection.Input; myOracle
0 2024-04-14
编程技术问答社区
ODP.Net管理的驱动程序-ORA-12704:生成代码中的字符集不匹配
我当前正在使用Oracle托管驱动程序(v12.1.2400)作为我的实体框架驱动程序,并且当前在执行过程中看到ORA-12704: character set mismatch错误. 我正在使用的linq-> SQL代码如下: from c in CUSTOMER.AsNoTracking() where c.ACCOUNT.Contains("DE") && c.DELETED == "N" orderby (c.FORENAME + c.SURNAME) select new { c.ACCOUNT, c.FORENAME, c.SURNAME}) 这正在创建以下SQL: SELECT "Project1"."C2" AS "C1", "Project1"."ACCOUNT" AS "ACCOUNT", "Project1"."FORENAME" AS "FORENAME", "Project1"."SURNAME" AS "SURNAME" FROM
0 2024-04-13
编程技术问答社区
如何禁用连接池?
我的应用程序用来连接到DB的连接字符串如下: private const string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST=" + "(ADDRESS=(PROTOCOL=TCP)(HOST=host.name)(PORT=1521)))" + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=service.name)));" + "User Id=myusername;Password=mypass;"; 在我的应用程序的所有DB访问点中,我都使用以下模式: OracleConnection conn = new OracleConnection(oradb); try {
0 2024-04-13
编程技术问答社区
如何从C#向Oracle存储过程传递一个表值参数
我有一个名为CREATE_CASE_EXL的Oracle存储过程: PROCEDURE CREATE_CASE_EXL(P_RICdata RICTab, P_sACTION_TYPE IN VARCHAR2); 其中RICTab是一种自定义类型: TYPE RICTab IS TABLE OF MMSRRicRec INDEX BY BINARY_INTEGER; TYPE MMSRRicRec IS RECORD ( RIC VARCHAR2(32), FID_NO NUMBER(8), REC_ID NUMBER(8), MMS_ACTION VARCHAR2(1) ); 我在pl/sql中运行此代码以执行CREATE_CASE_EXL: DECLARE pTE_RICS RICTab BEGIN pTE_RICS(1).RIC :
0 2024-04-13
编程技术问答社区
如何在C#中使用Oracle ODP.Net执行一个更新语句
我正在使用Oracle.DataAccess.Client在我的 oracle 数据库中使用 asp.net 应用程序中的数据库. msdn 在 odp.net 和 oracle 的文档中没有帮助文档真的很糟糕.我找不到这个简单问题的答案. 不可能执行简单的更新语句而无需构建dataset对象并更新dataset? 如何使用 Oracle Odp.net 在 c#? 中执行更新语句 解决方案 我需要检查确切的语法,但这是我头顶上的一些快速代码 using (OracleConnection con = new OracleConnection(...)) { con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "update table set col1 = :param1, col2 =
0 2024-04-13
编程技术问答社区
ODP.NET Oracle.ManagedDataAcess 随机 ORA-12570 错误
我正在尝试从非管理版本中迁移到oracle.manageddataacess,并接收随机ORA-12570 TNS:数据包读取器失败. 我不知道为什么此错误启动,但是一旦开始,每个后续请求都会在10-30分钟内给出相同的错误,然后再进行10-30分钟的工作. . 因此,这是一段时间后续失败的随机失败,然后随后的成功 已经尝试了很多事情来恢复: 环境: Oracle.ManagedDataAcess版本12.1.2400(4.121.2.20150926)(Nuget)(服务器上未安装的GAC参考可以覆盖bin版本) Oracle Server Oracle Database 12C Enterprise Edition版本12.1.0.2.0-64位生产 Windows 2012(Windows Update OK) 检查: 防火墙:这不是防火墙问题 机器错误:我的机器,Azure WebApp和AWS EC2实例上也发生了同样的问题
2 2024-04-13
编程技术问答社区
odp.net能否将一个参数传递给一个布尔型pl/sql参数?
是否可以在PL/SQL存储过程中正确将OracleParameter正确传递到布尔参数? 解决方案 您无法在SQL中使用布尔参数.因此,调用一个存储过程,该过程采用或返回布尔值在SQL中无法使用.使用PL/SQL块内的这样的过程没有问题. 添加了jcallico答案: 我使用以下解决方法绕过此限制: 使用匿名块包装函数调用. 返回包含1或0的输出变量. 读取输出变量并将其施放给布尔值. 这是一些示例代码: using (var connection = new OracleConnection("")) { var command = new OracleCommand(); command.Connection = connection; command.CommandText = "declare v_bool boolean;" + "begi
0 2024-04-12
编程技术问答社区
ODP.NET连接池参数
我正在尝试使用ODP.NET版本2.111.6.20为.NET应用程序配置连接池.数据库是Oracle 11.1. 我在.NET 2.0应用程序中使用以下连接字符串: Data Source=prod; User Id=FAKE_USER; Password=FAKE_PASS; Pooling=true; Min Pool Size=2; Max Pool Size=5; Connection Timeout=30;" 根据文档,连接池应使用2个连接初始化,并根据需要最多增加5个连接.它绝不应该获得5个连接. 我看到的是连接一次增长2个,并长达10个连接.我正在通过查询V $会话表来监视Oracle数据库中的连接 如果有人可以帮助我确定该应用程序内部连接池中可能发生的事情,这可能允许的最大连接次数超过我会欣赏的最大连接数. 样本C#代码 这是对数据库进行调用的代码的示例: const string connectionString = "Da
0 2024-04-12
编程技术问答社区
甲骨文数字转为C#十进制
我知道互联网上有几个有关此问题的线程和帖子,我已经阅读了它们(不是每篇文章,我必须承认),但是它们都不完全满足我的要求. 我的情况: 我正在使用ODP.NET(DLL版本2.111.6.0)访问Oracle DB(版本10 + 11)和DataReader来检索数据(.NET 3.5,C#). 使用此代码会导致' system.overflowException(算术操作导致溢出.)' decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(), NumberStyles.Any, null, out parsedOraDecimal) and this one results in a value of '3,000000000000000000000000000000000000000000000000000000000E-126' decimal.TryParse(oraRe
0 2024-04-12
编程技术问答社区
ODP.NET托管-无法找到请求的.Net框架数据提供者
使用Visual Studio 2013,我添加了最新版本的ODP.NET,该版本使用Nuget进行了管理: Install-Package odp.net.managed .2 现在,当我尝试运行以下代码时: Database db = DatabaseFactory.CreateDatabase(); 它引发以下例外: An exception of type 'System.ArgumentException' occurred in System.Data.dll but was not handled in user code Additional information: Unable to find the requested .Net Framework Data Provider. It may not be installed. 阅读了其他用户的类似问题后,我将"托管驱动程序"部分添加到C:\ Windows \ Microso
0 2024-04-12
编程技术问答社区
从C#和ODP.NET中调用一个包中的函数的代码
我尝试使用odp.net编写C#代码以在软件包中调用函数.我在下面遇到两个错误: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to INSERT_FUNC' ORA-06550: line 1, column 7: PL/SQL: Statement ignored ORA-06550: line 1, column 7: PLS-00221: 'INSERT_FUNC' is not a procedure or is undefined ORA-06550: line 1, column 7: PL/SQL: Statement ignored 我的OracleCommand设置为: cmd.CommandText = "PKG_NAME.INSERT_FUNC"; cmd.CommandType = CommandType.StoredProc
0 2024-04-12
编程技术问答社区
当抛出异常时,DataAdapter.Fill()是否关闭其连接?
我目前正在使用Oracle(System.Data.OracleClient)的Microsoft Ado.net提供商.我知道它当然不是可用的最好的Oracle提供商,并且它将很快被弃用,我应该改用Oracle的odp.net.我仍然使用MS提供商的原因是因为 odp.net按位置绑定参数而不是名称.当您在查询中使用许多参数时,这确实可以是PITA,因为您必须小心地以正确的顺序添加它们,这很容易导致错误.当您在同一查询中多次使用相同的参数时,这也很烦人,例如: SELECT A,B,C FROM FOO WHERE X = :PARAM_X OR :PARAM_X = 0 使用odp.net,我必须在OracleCommand上添加两个参数,我认为这很愚蠢... odp.net的OracleCommand具有更改该默认行为的属性:BindByName.设置为true时,参数将受名称绑定,这就是我想要的.不幸的是,这并没有真正帮助我,因为: 默认设置为False
0 2024-04-12
编程技术问答社区
ODP.NET托管库能解决别名问题,但32位库不能。
我的盒子上安装了32位驱动程序(它们是由某些DBA安装和配置的) 我写了一个简单的脚本来测试驱动程序,几乎如下 using (DataTable table = new DataTable()) { using (OracleConnection connection = new OracleConnection()) { connection.ConnectionString = "Data Source=alias;User id=user;Password=password"; connection.Open(); using (OracleCommand command = connection.CreateCommand()) { command.CommandType = CommandType.Text; command.CommandTe
0 2024-04-11
编程技术问答社区
ODP.NET Oracle.ManagedDataAccess导致ORA-12537网络会话结束的文件
概述 我想用orcale替换oracle.dataaccess.托管 dataAccess,但是用后者打开一个连接,将 ora-ora-ora-ora-ora-12537网络会话结束.例外. 异常消息/堆栈跟踪 {oracleinternal.network.networkexception(0x00000030f9): ora-ora-12537 :netzwerksession:dateiende atoracleinternal.network.readerstream.read(orabuf ob) 在oracleinternal.ttc.orabufreader.getDatafromnetwork() 在oracleinternal.ttc.orabufreader.read(布尔bignoredata) 在oracleinternal.ttc.marshallingengine.unmarshalub1(布尔bignoredata) atracleintern
0 2024-04-11
编程技术问答社区
提供者与Oracle客户端的版本不兼容
我正在尝试使用 Oracle Odp.net 11G(11.1.0.6.20)Instant Client 在我的ASP.NET项目上用作 Data Provider ,但是当我运行的是ASPX页面,我获得了" "提供商与Oracle Client "错误消息不兼容.任何帮助将不胜感激. 我已经在Visual Studio 2005中引用了数据提供商,而背后的代码看起来像: using Oracle.DataAccess.Client; .. OracleConnection oOracleConn = new OracleConnection(); oOracleConn.ConnectionString = "Data Source=MyOracleServerName;" + "Integrated Security=SSPI"; oOracleConn.Open(); //Do Something oOracleConn.Close(); 页
0 2024-04-10
编程技术问答社区
为什么这个oracle批量插入不工作?
我试图将一些数据插入Oracle DB.我遵循文档中的示例. this.DataBaseAccess = new OracleConnection(connString); var dataAdapter = new OracleDataAdapter(); var insertCmd = DataBaseAccess.CreateCommand(); insertCmd.CommandType = CommandType.Text; insertCmd.BindByName = true; var names = new List(); foreach (DataTable table in product.Contracts.Tables) { foreach (DataRow row in table.Rows) { names.Add(row["Contract"].ToString()); } cons
0 2024-04-05
编程技术问答社区
Oracle.DataAccess(ODP.NET)数组绑定 "值不在预期范围内"
我的场景 我正在使用C#3.5的ODP.NET Oracle提供商,并且我正在尝试将数组作为过程的参数将数组传递... var paramNames = new OracleParameter(); paramNames.CollectionType = OracleCollectionType.PLSQLAssociativeArray; paramNames.ParameterName = "P_JOB_TITLE"; paramNames.Size = 2; paramNames.Value = new string[2]{ "name1", "name1" }; cmd.Parameters.Add(paramNames); 当运行时代码转到paramnames.value = new String [2] {" name1"," name1"};它遇到了这个错误 "值不在预期范围内" 任何人可以修复它吗? 附加信息 指定oracledB
4 2024-03-31
编程技术问答社区
ADO.Net的最佳实践--在进行异步数据库调用时的单个连接与多个连接
我正在使用ado.net连接到某些SQL Server和Oracle数据库,我想同时运行一些查询. 我使用sqlclient名称空间的类,用于sql server和odp.net for Oracle.对于SQL Server,我在连接字符串中添加了火星选项,并在SQLCommand上调用异步API. ODP.NET不提供异步API,因此我必须同时提供我的oracle命令单独的线程. 我的问题是,我应该如何处理连接对象?我应该根据每个数据库实例创建一个DBConnection并针对单个连接而异步执行命令,还是应该给每个并发命令一个单独的连接对象?共享连接对象是否成为同时执行多个命令的争论点? 我会编写一些比较测试,但很想听听具有异步数据库命令经验的人.预先感谢您! 解决方案 前一次,我们面对这个问题,并选择处理每个并发命令的单独连接对象.这是一个应用数据库的应用程序(对于每个页面,都执行了40个查询).由于创建连接,我们看到这很慢. 因此,我们将其更改为执
0 2024-03-18
编程技术问答社区