Tag: oracle

C#/ Oracle:指定查询的编码/字符集?

我正在尝试获取Oracle 10数据库的一些数据。 有些细胞含有德国变形金刚(äöü)。 在我的管理工具( TOAD )中,我可以很好地看到它们:“MantelfürDamen”(女士夹克) 这是我的C#代码(简化): var oracleCommand = new OracleCommand(sqlGetArticles, databaseConnection); var articleResult = oracleCommand.ExecuteReader(); string temp = articleResult.Read()[“SomeField”].ToString(); Console.WriteLine(temp); 输出是:“Mantel f ? r Damen” 尝试调试(将鼠标移到变量上),Debug-Window,Console-Window,File。 我想我必须在其中指定编码/字符集。 但是哪里?

C#连接到Oracle DB DateTime格式

我有一个连接到Oracle后端的.Net webapp。 我有一个基页,每个页面使用我设置的地方 protected override void OnPreInit(EventArgs e) { System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo(“en-CA”); // Creating the DateTime Information specific to our application. System.Globalization.DateTimeFormatInfo dateTimeInfo = new System.Globalization.DateTimeFormatInfo(); // Defining various date and time formats. dateTimeInfo.DateSeparator = “/”; dateTimeInfo.LongDatePattern = “dd-MMM-yyyy”; dateTimeInfo.ShortDatePattern = “dd-MMM-yyyy”; dateTimeInfo.MonthDayPattern = “dd/MM”; dateTimeInfo.LongTimePattern = “HH:mm”; dateTimeInfo.ShortTimePattern = “HH:mm”; dateTimeInfo.FullDateTimePattern = […]

多个数据库,模型略有变化。 如何允许Entity Framework在运行时删除列?

这是对“ 具有轻微变化模型的多个数据库的跟进。如何允许EF在运行时使用不同的数据库结构? ”问题: 我正在使用.NET4.5 , MSSQL , Oracle , .NET4.5在全公司(许多部门)全球使用的系统上查询属于我们部门的不同数据库,这些数据库大多数是相同的EF模型,一些数据库是Oracle和一些是Microsoft SQL ,有些是开发或uat,有些是日志。 我正在为Oracle和MSSQL数据库使用不同的EF模型。 一个要求是在运行时在数据库之间切换,这很容易, public AggregatorEntities(string connectionString) : base(connectionString) { } 但它确实有副作用 – 许多数据库(dev,uat,dr,logs,…)与Live不同(模型是从Live生成的),这在查询这些数据库时会导致错误。 管理层了解情况,他们可以使用某个特定数据库的开发人员对全局查询系统进行更改,以便测试人员和uat查询数据。 但是,他们希望进行更改,以便花费最少的时间来完成此操作 – 因为每个涉及数据库更改的项目都需要额外的成本。 我基本上需要构建一个’可以处理所有’弹性系统,当一个人在EF更改数据库时,会做一些事情来适应特定的数据库。 有不同的故障情况: 1.表上列的名称相同但实体中的类型不同 2.表上没有列,但EF中有一个实体 3.桌面上不在EF上的其他列 4.数据库中不在EF模型中的其他表 5.数据库中没有表,但EF模型中有实体。 这是在运行时删除EF模型但不在数据库中的列的情况(上面的第3点)。

OracleException(0x80004005)连接到Oracle数据库时

我开发了一个简单的C#,。net 4.0网站,我想将其部署到IIS测试服务器上。 我正在使用Oracle.DataAccess程序集连接到Oracle数据库,并且我添加了该DLL(以及许多其他相关DLL的地狱,只是为了好的措施并且在shotfun尝试尝试解决这个问题) ,到我网站的bin文件夹。 它在我的开发机器上工作正常(显然;在复制所有这些DLL之前工作正常),但不是我的测试服务器。 在测试服务器上,我收到以下exception: [OracleException (0x80004005)] Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) +1468 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src) +24 Oracle.DataAccess.Client.OracleConnection.Open() +4391 MappingQueries.connect() +173 scripts_list_mappings.Page_Load(Object sender, EventArgs e) +17 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 […]

无法在C#中解析Oracle时间戳

我有Oracle的时间戳: string timestamp = “23-JUN-14 09.39.04.000000000 AM”; 我无法将其解析为系统日期时间对象。 我用了: CultureInfo provider = CultureInfo.InvariantCulture; String format = “yy-MMM-dd hh:mm:ss:fffffff”; string timestamp = “10-DEC-07 10.32.47.797201123 AM”; { var date = DateTime.ParseExact(timestamp, format, provider); DateTime dateTime = DateTime.ParseExact(timestamp.ToString(), “dd-MMM-y HH:mm:ss”, CultureInfo.InvariantCulture); } 它仍然传递错误。 它在m后工作7 f但不超过。 我用过Parse尝试ParseExact – 有什么办法吗?

TransactionScope和Oracle的问题

我们编写了一个C#3.5客户端,使用ODP.NET与Oracle数据库(11g)进行通信。 此应用程序具有批处理过程,其中执行长时间运行的任务,在TransactionScope中对数据库进行各种调用。 在我们的开发环境中一切顺利,但在我们的一个客户(拥有大量数据)的UAT环境中,出现两个交替(有时是一个,有时是另一个……)错误: 无法登记分布式事务 交易已中止。 (内部exception:事务超时) 我们目前使用一天的超时时间进行交易(用于测试目的)。 在UAT环境中运行所述进程导致在大约一段时间后停止。 10分钟,上面有一个例外,所以没有办法接近超时值。 这是第二个错误的堆栈跟踪片段: at System.Transactions.TransactionStatePromotedAborted.CreateAbortingClone(InternalTransaction tx) at System.Transactions.DependentTransaction..ctor(IsolationLevel isoLevel, InternalTransaction internalTransaction, Boolean blocking) at System.Transactions.Transaction.DependentClone(DependentCloneOption cloneOption) at System.Transactions.TransactionScope.SetCurrent(Transaction newCurrent) at System.Transactions.TransactionScope.PushScope() at System.Transactions.TransactionScope..ctor(TransactionScopeOption scopeOption) at System.Transactions.TransactionScope..ctor() at Application.Domain.DataAccess.Oracle.EntityDaoBase`2.SaveItem(TEntity item, EntityReference`1 user) 该过程尝试将项目保存到事务范围内的数据库,但堆栈跟踪显示构造函数被命中为TransactionScope类,这意味着它创建了一个新的TransactionScope。 我到目前为止对吗? 因为我不太了解TransactionScope的内部工作原理,但是当你在范围内调用方法时,它会创建一个新的事务(假设inheritance自环境事务)。 可能是因为我是对的,这个新事务没有inheritance正确的超时(但是默认的超时),所以嵌套事务会导致这个超时exception? 如果没有,任何想法可能是什么? 另外,在环境事务中调用的方法中没有定义嵌套事务。 任何帮助将不胜感激! 编辑1: 该function的简化代码片段: public void SomeLengthyBatchProcess() { using (var transaction = […]

Oracle存储过程,SYS_REFCURSOR和NHibernate

我有一个遗留的Oracle(10.2g)数据库,我正在连接,我想使用NHibernate(2.0.1)从存储过程中返回对象。 有问题的存储过程使用SYS_REFCURSOR返回结果。 根据文档,这应该是可行的,但我在互联网上发现了一些建议,否则。 这是我的释义代码: 映射文件: EXEC RS_DB.GETPERSONTEST 存储过程: CREATE OR REPLACE PROCEDURE RS_DB.GETPERSONTEST ( io_cursor IN OUT sys_refcursor ) IS BEGIN OPEN io_cursor FOR SELECT PERSONCODE, PERSON_NAME, PERSON_SURNAME FROM PEOPLE END GETPERSONTEST;

Linq to Entities Group By(OUTER APPLY)“oracle 11.2.0.3.0不支持申请”

我在下面有代码示例查询产品列表。 var productResults = Products.Where((p) => refFilterSequence.Contains(p.Ref)) .GroupBy(g => g.Code, (key, g) => g.OrderBy(whp => whp.Ref).First()).ToList(); 这完全按预期工作,并在使用内存集合时返回我想要的4行,但是在针对Oracle数据库运行时: .GroupBy(g => g.Code, (key, g) => g.OrderBy(whp => whp.Ref).First()) 这会抛出一个错误,说我应该使用Oracle数据库不支持的FirstOrDefault 。 错误oracle 11.2.0.3.0不支持apply thrown。 谷歌在CodePlex上揭示了这一点: https : //entityframework.codeplex.com/workitem/910 。 使用以下二进制文件时会发生这种情况: EntityFramework 6.0.0.0 Oracle.ManagedDataAccess 4.121.2.0 Oracle.ManagedDataAccess.EntityFramework 6.121.2.0 .Net Framework 4.5.1 该数据库是Oracle 11.2.0.3.0数据库。 生成的sql使用OUTER APPLY(见下图),但11.2.0.3.0版本的Oracle不支持,那么为什么EF / Oracle.ManagedDataAccess会尝试使用它呢? 有没有办法告诉EF不要使用APPLY关键字? 下面的页面显示在Oracle 12c第1版中添加了APPLY支持,但我无法更新所有数据库只是为了使GROUP […]

C#如何以任意指定的Oracle日期格式解析日期字符串?

如何在C#中以任意指定的Oracle日期格式解析日期字符串? 所以… oracle格式字符串与C#datetime格式字符串略有不同,所以我不能使用该format-string作为解析的参数。 我正在使用Devart / CoreLab,但他们的OracleDate.Parse似乎很奇怪而且对我不起作用。 我该如何正确解析它? 我是否必须使用TO_DATE / TO_CHAR调用数据库才能获得转换? 或者我必须将每个oracle格式的字符串元素映射到C#格式的字符串元素中? 编辑:Oracle和C#的格式字符串不同,例如MON而不是MMM … edit2:更多澄清:基本上我会有字符串oracle-date-in-string,例如“08-OCT-85”,我也能够获得这些日期字符串所遵循的oracle格式模式,例如“ DD-MON-YY“,”DD-MON-RR“,”YYYY / RM / DD“……等 我希望能够正确地将它们解析为C#DateTime,以便我可以将它们设置为Parameter(期望C#DateTime),问题是这些oracle-date-format-pattern与C#DateTime不同 – 解析格式图案。 我怀疑某处可能存在一些可以做类似DateTime的functiondt = ParseDatestringWithSpecifiedOracleDatePatternIntoCSharpDateTime(“08-OCT-85”,“DD-MON-YY);对吗?但我还是找不到它:(

ODP.NET如何将字符串数组传递给Oracle存储过程?

关于这个问题有很多问题和令人困惑的 文档 ,但到目前为止还没有运气。 我有以下PL / SQL存储过程; PROCEDURE PS_test( Liste1 Listcar, Liste2 Listcar, P_CURS_MESSAGE out CURSOR_REF_TYP ) Listcar类型如下: TYPE Listcar IS VARRAY(100)OF VARCHAR2(50); 这是我到目前为止所尝试的: string[] list = { “name1”, “name1” }; OracleParameter oParam = (OracleParameter)myOracleCommand.CreateParameter(); oParam.ParameterName = “Liste1”; oParam.UdtTypeName = “LISTCAR”; oParam.Value = list; oParam.Direction = ParameterDirection.Input; myOracleCommand.Parameters.Add(oParam); 在值赋值上出现以下错误: Value does not fall within the expected […]