我试图DBMS_OUTPUT.PUT_LINE()通过C#从我的匿名PL/SQL块中获取方法的输出.我在这里看了几个其他相关的问题,但我仍然遇到麻烦.执行匿名块的返回代码正在返回-1,根据文档应该是正确的.
我正在设置DBMS_OUTPUT.ENABLE()to NULL以便不设置特定的缓冲区大小,然后使用该DBMS_OUTPUT.GET_LINES()方法从该缓冲区获取行.
它在缓冲区中返回任何内容(空OracleString[])并返回0行.我的匿名PL/SQL块很简单,但应该适用于任何.
DECLARE
lvsName VARCHAR2(6) := 'Oracle';
BEGIN
DBMS_OUTPUT.PUT_LINE('Do you see me?');
DBMS_OUTPUT.PUT_LINE('My name is: ' || lvsName);
END;
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
using (OracleDataAdapter oda = new OracleDataAdapter())
using (OracleCommand cmd = new OracleCommand(sql, _connection))
{
// Execute anonymous PL/SQL block
cmd.CommandType = CommandType.Text;
var res = cmd.ExecuteNonQuery();
// Set output Buffer
cmd.CommandText = "BEGIN DBMS_OUTPUT.ENABLE(NULL); END;";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
// Get output
cmd.CommandText …Run Code Online (Sandbox Code Playgroud) 我有一个简单的Oracle存储过程,它传入三个参数,并有一个输出参数:
CREATE OR REPLACE PROCEDURE RA.RA_REGISTERASSET
(
INPROJECTNAME IN VARCHAR2
,INCOUNTRYCODE IN VARCHAR2
,INLOCATION IN VARCHAR2
,OUTASSETREGISTERED OUT VARCHAR2
)
AS
BEGIN
SELECT
INPROJECTNAME || ', ' || INLOCATION || ', ' || INCOUNTRYCODE
INTO
OUTASSETREGISTERED
FROM
DUAL;
END RA_REGISTERASSET;
Run Code Online (Sandbox Code Playgroud)
我试图使用Entity Framework 6.1来获取OutAssetRegistered值,但是,我在调用之后得到一个null SqlQuery,没有异常:
public class CmdRegisterAssetDto
{
public string inProjectName { get; set; }
public string inCountryCode { get; set; }
public string inLocation { get; set; }
public string OutAssetRegistered { get; set; }
} …Run Code Online (Sandbox Code Playgroud) c# oracle entity-framework entity-framework-6 oracle-manageddataaccess
Oracle.ManagedDataAccess.EntityFramework 6.122.1.0库用于从MVC ASP.Net应用程序访问Oracle数据库.这是截至2017年11月14日NuGet的最新图书馆版本
protected override Expression<Func<MyEntity, object>> getSelector()
{
return m => new
{
ID = m.ID,
NAME = m.Name,
LONGSTRING = "Blah-blah-blah-blah...some thousands characters..." +
m.ID + "blah-blah...blah"
};
}
protected override ProblemMethod()
{
var result = db.MyEntity.Select(getSelector()).ToList();
}
Run Code Online (Sandbox Code Playgroud)
有问题.发生这种情况,因为非常长的字符串(几千个字符)被连接进去 LONGSTRING,执行Select抛出下一个异常.
ORA-00932:不一致的数据类型:"'预期CLOB得到了CHAR"
我的班级需要获得Expression与GetSelector()压倒一切的.如何克服错误或绕过它?一种绕过的方法是强制EF Select在客户端上执行.怎么做?
PS:俄语同样的问题.
我应该提出MyEntity
CREATE TABLE MyEntity (ID NUMBER(10), Name VARCHAR2(100));
Run Code Online (Sandbox Code Playgroud) 我们的Oracle数据库最近从12.1.0.2更新到12.2.0.1 +补丁集更新20180417.
自更新以来,我们在调用plsql过程时收到以下错误: ORA-21700:对象不存在或标记为删除
我们已经缩小了问题范围,它似乎是由在包中定义的关联数组上使用表运算符引起的.我的所有研究表明,我们正在做的是在12.1中引入的,并且仍然应该在12.2中工作.
下面是与相关类型定义失败的过程的简化版本.它是使用托管数据访问从c#代码调用的.
这是包中的关联数组类型定义:
TYPE NUMBER_ARRAY IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
Run Code Online (Sandbox Code Playgroud)
这是一个失败的过程:
PROCEDURE GetReadingStatus(
STATUSID_ARR IN NUMBER_ARRAY,
P_RETURNS OUT SYS_REFCURSOR
)
BEGIN
OPEN P_RETURNS FOR
SELECT * FROM READINGSTATUS rs
WHERE rs.statusID IN (select * from table(STATUSID_ARR));
END;
Run Code Online (Sandbox Code Playgroud)
如果select * from table(STATUSID_ARR)部分被移除,它将运行.
在12.2中对关联数组使用表运算符是否存在问题?问题可能源于其他问题吗?
我正在将ef core(2.2.4)与oracle数据库一起使用
oracleProvider:Oracle.EntityFrameworkCore(2.18.0-beta3)
此代码:
IQueryable<KeyInfo> queryable = context
.KeyInfos
.Where(x => x.MobileNumber == "989191111111")
.Take(1);
Run Code Online (Sandbox Code Playgroud)
生成此数据库查询:
SELECT "x"."ID", "x"."Key", "x"."MobileNumber", "x"."NationalCode"
FROM "KeyInfo" "x"
WHERE "x"."MobileNumber" = N'989191111111'
FETCH FIRST 1 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
运行查询给我这个错误:
ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Error at Line: 4 Column: 1
Run Code Online (Sandbox Code Playgroud)
反正要解决吗?正确的方法是获得第一行
AND rownum = 1
不
仅获取第一行
和.ToList()与IQueryable一起正常工作
c# oracle entity-framework entity-framework-core oracle-manageddataaccess
我正在使用EF 6.0.0.0和ODP.Net Oracle.ManagedDataAccess版本创建一个MVC应用程序来4.121.2.0进行数据访问.
在我的Controller调用中EmployeeController,我有以下代码片段:
public ActionResult Details(int id) {
try {
EmployeeContext employeeContext = new EmployeeContext();
Employee employee = employeeContext.Employees.Single(x => x.Id == id); //Here the exception occurs!
return View(employee);
} catch (Exception e) {
return View(e);
}
}
Run Code Online (Sandbox Code Playgroud)
当我加载Employee/Details.cshtml页面时,我得到以下例外:
"执行命令定义时发生错误.有关详细信息,请参阅内部异常."
在内部异常中,它说:
ORA-00942:表或视图不存在
这让我很困惑,因为在我的Oracle数据库中,该表肯定存在(我使用Toad for Oracle检查):
该connectionString数据库本身是我使用的其他项目,我在哪里可以查询从数据库中的数据没有困难相同的连接字符串.
以下是我的Employee类在以下方面的声明Models/Employee.cs:
using System.ComponentModel.DataAnnotations.Schema;
.
.
.
[Table("TBLEMPLOYEE")] //the same table name
public class Employee {
public int …Run Code Online (Sandbox Code Playgroud) c# oracle asp.net-mvc entity-framework oracle-manageddataaccess
在 Oracle 数据库中,它的 ID 列定义为数字:
...以及表的相应序列...:
如何确保 ID 列获得序列中的下一个值?
using (var db = new MyOracleDb()){
var user= new User(){ first_name = 'Abe', last_name = 'Lincoln'};
//Do something here with the sequence and set the ID?
db.User.Add(user);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用最新的 Oracle.ManagedDataAccess 和 Oracle.ManagedDataAccess.EntityFramework + EF6x。
我得到了我只能描述为来自 nuget 的 oracle.ManagedDataAccess 包,似乎在我的查询末尾添加了字符。
我的最终目标是以 C# 命令参数的形式为下面的 SQL 提供绑定变量。
我的查询:(如果使用 SQL Developer 执行可以正常工作,返回 3 个字符串和一个日期时间)
with max_shift as (
select max(shi.shift_id) shift_id
from source_schema.site_instance ins
join source_schema.tu_move_shifts shi on ins.instance_id = shi.instance_id
where ins.instance_name = 'SiteOneSubsiteTwo'
),
max_values as (
select max(end_time) event_time
from max_shift ms
join source_schema.events_extract ev on ev.move_shift_id = ms.shift_id
where ev.site_code = 'SiteOne'
union all
select max(destination_arrive_time) event_time
from max_shift ms
join source_schema.movements_extract mov on mov.move_shift_id = ms.shift_id
where mov.destination_site_code = 'SiteOne'
)
select 'Data …Run Code Online (Sandbox Code Playgroud) 这是我的powershell代码:
[void][System.Reflection.Assembly]::LoadFile("C:\DLL\Oracle.ManagedDataAccess.dll")
$OracleConnexion = New-Object Oracle.ManagedDataAccess.Client.OracleConnection('User Id=test;Password="test";Data Source=10.2.2.1/TEST')
$TimeOut = 60
$OracleConnexion.Open()
$Query=$OracleConnexion.CreateCommand()
$Query.CommandText="Select * FROM TEST"
$Query.CommandTimeout = $Timeout
$ExecuteRequete=$Requete.ExecuteReader()
while ($ExecuteRequete.Read()) {
$SiebelLastRecord += $ExecuteRequete.GetDateTime(0).ToString()
}
$OracleConnexion.Close()
Run Code Online (Sandbox Code Playgroud)
所以我打开ODP.NET连接$OracleConnexion.open()然后关闭它$OracleConnexion.close()是否足以正确关闭我与Oracle数据库的连接?或者我应该使用$OracleConnexion.Dispose()?
我通过任务调度程序每隔5分钟执行一次PowerShell ...所以也许我应该使用Dispose()来避免内存饱和?
c# powershell odp.net powershell-3.0 oracle-manageddataaccess
在上次Windows更新后,执行与Oracle数据库连接的测试因AuthenticationException而失败.消息和堆栈跟踪如下所示:
<ErrorInfo>
<Message>Test method threw exception:
System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> Oracle.ManagedDataAccess.Client.OracleException: Oracle Communication: Failed to connect to server or failed to parse connect string ---> OracleInternal.Network.NetworkException: Oracle Communication: Failed to connect to server or failed to parse connect string ---> System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---> System.ComponentModel.Win32Exception: No credentials are available in the security package</Message>
<StackTrace>
--- End of inner exception stack trace ---
at System.Net.Security.NegoState.StartSendAuthResetSignal(LazyAsyncResult lazyResult, Byte[] message, Exception exception)
at …Run Code Online (Sandbox Code Playgroud) c# oracle database-connection windows-10-desktop oracle-manageddataaccess
c# ×9
oracle ×9
odp.net ×2
.net ×1
asp.net-mvc ×1
clob ×1
oracle12c ×1
plsql ×1
powershell ×1
sql ×1