标签: system.data.oracleclient

ORA-00911:无效字符

我在我的oracle(11g)数据库中创建了两个表,如下所示:

    create table "test" ("id" int);
    create table test ("id" int);
Run Code Online (Sandbox Code Playgroud)

然后在我的C#程序中出现了一个问题:

    OracleConnection conn = new OracleConnection(-myConnectionString-);
    conn.Open();
    OracleCommand command = new OracleCommand("select * from test;", conn);
    var v = command.ExecuteReader(); 
    OracleCommand command = new OracleCommand("select * from \"test\";", conn);
    var v = command.ExecuteReader(); 
Run Code Online (Sandbox Code Playgroud)

对于command.ExecuteReader()我有一个"ORA-00911:无效字符"错误.

c# system.data.oracleclient

58
推荐指数
2
解决办法
5万
查看次数

OracleCommand SQL参数绑定

我对下面参数的绑定有问题.连接有效,因为我在不使用参数的情况下测试了它.但是,执行前查询的值仍然使用'@userName'而不是'jsmith'.

问题是什么?这不是绕过绑定的正确方法吗?

public static String GetFullName(String domainUser)
{
    DataTable dT;
    String fullName = "";

    OracleConnection db = DatabaseAdapter.GetConn();
    db.Open();

    OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM user_profile WHERE domain_user_name = '@userName'", db);
    oraCommand.BindByName = true;
    oraCommand.Parameters.Add(new OracleParameter("@userName", domainUser));

    OracleDataReader oraReader = null;
    oraReader = oraCommand.ExecuteReader();

    if (oraReader.HasRows)
    {
        while (oraReader.Read())
        {
            fullName = oraReader.GetString(0);
        }
    }
    else
    {
        return "No Rows Found";
    }

    oraReader.Close();
    db.Close();
    db.Dispose();

    return fullName;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我将@添加到参数字段名称,但它仍然无法修复它.

c# oracle system.data.oracleclient

29
推荐指数
2
解决办法
13万
查看次数

使用大型CLOB从C#调用存储过程的问题

我不是第一个遇到这些问题的人,并会在下面列出一些参考文章,但我仍在寻找合适的解决方案.

我需要从C#Web服务调用存储过程(Oracle 10g数据库).Web服务器安装了Oracle 9i客户端,我使用的是Microsoft System.Data.OracleClient.

该过程将XML作为CLOB.当XML超过4000字节(这可能是正常的用例)时,我偶然发现了以下错误:

ORA-01460 - 要求执行未实现或不合理的转换

我发现了这个,这个这个帖子.

此外,我发现了一个很有前途的解决方法,它不直接从C#调用存储过程,而是定义了一段匿名PL/SQL代码.此代码作为OracleCommand运行.XML嵌入为字符串文字,过程调用从该段代码中完成:

private const string LoadXml =
    "DECLARE " +
    "  MyXML CLOB; " +
    "  iStatus INTEGER; " +
    "  sErrMessage VARCHAR2(2000); " +
    "BEGIN " +
    "  MyXML := '{0}'; " +
    "  iStatus := LoadXML(MyXML, sErrMessage); " +
    "  DBMS_OUTPUT.ENABLE(buffer_size => NULL); " +
    "  DBMS_OUTPUT.PUT_LINE(iStatus || ',' || sErrMessage); " +
    "END;";
OracleCommand oraCommand = new OracleCommand(
    string.Format(LoadXml, …
Run Code Online (Sandbox Code Playgroud)

c# oracle stored-procedures clob system.data.oracleclient

18
推荐指数
1
解决办法
2万
查看次数

如何使用Windows身份验证将System.Data.OracleClient连接到oracle db?

使用Oracle SQL Developer,我可以将/ -character放入用户名并将密码保留为空,然后我就连接了.我在数据库中创建了OP $ MYWINDOWSUSERNAME用户.

编辑:如果我检查操作系统身份验证复选框(清空和禁用用户名+密码),SQL Developer不起作用.此外,首选项 - >数据库 - >高级 - >使用Oracle客户端未经检查,因此我猜想SQL Developer与我的System.Data.OracleClient.OracleConnection问题有什么关系.

但是,当我尝试形成这样的连接字符串时:

string.Format("Data Source={0}; user id=/;password=;Integrated Security=yes", dbName);
Run Code Online (Sandbox Code Playgroud)

我收到ORA-01017:用户名/密码无效:登录被拒绝

string.Format("Data Source={0}; user id=/;password=;Integrated Security=no", dbName);
Run Code Online (Sandbox Code Playgroud)

我得到了ORA-01005.

string.Format("Data Source={0};Integrated Security=yes", dbName);
Run Code Online (Sandbox Code Playgroud)

我收到ORA-01017:用户名/密码无效:登录被拒绝

string.Format("Data Source={0}; user id=/;", dbName);
Run Code Online (Sandbox Code Playgroud)

我得到了ORA-01005

string.Format("Data Source={0};User Id=/;Integrated Security=yes;", dbName);
Run Code Online (Sandbox Code Playgroud)

我得到了ORA-01017

当我指定用户名和密码时,我的程序中的OracleConnection和Oracle SQL Developer都工作.

编辑:这适用于

string.Format("Data Source={0};Integrated Security=yes", dbName);
Run Code Online (Sandbox Code Playgroud)

当sqlnet.ora行

SQLNET.AUTHENTICATION_SERVICES= (NTS) 
Run Code Online (Sandbox Code Playgroud)

改为

SQLNET.AUTHENTICATION_SERVICES= (NONE)
Run Code Online (Sandbox Code Playgroud)

如果有人写简短的回答发生了什么以及为什么,我很乐意给予他/她赏金.

oracle ado.net connection-string oracleclient system.data.oracleclient

11
推荐指数
1
解决办法
784
查看次数

如何告诉System.Data.OracleClient使用64位Oracle驱动程序

我正在尝试运行System.Data.OracleClient在Win7 x64工作站上使用的.NET应用程序.工作站安装了32位Oracle客户端,导致以下错误消息:

尝试加载Oracle客户端库会引发BadImageFormatException.在安装了32位Oracle客户端组件的64位模式下运行时,将发生此问题.

所以这是我漫长的尝试和失败之旅:

  1. 我尝试安装Oracle客户端win64_11gR2_client.但在设置过程中它崩溃而没有任何评论.
  2. 我按照不同SO线程回答,尝试并解压缩了instantclient-basic-windows.x64-11.2.0.2.0,并将包含二进制文件的文件夹放在windows PATH变量中.我仍然得到相同的错误消息(即使重新启动后).
  3. 我按照这个答案的"替代方式",将文件oci.dll,orannzsbb11.dlloraociei11.dll复制到我的网站项目的bin /文件夹中.仍然是相同的错误消息.
  4. 我尝试将所有文件从即时客户端复制到该目录中并再次尝试,但没有成功.
  5. 我安装了ODAC112021Xcopy_x64.zip并将安装文件夹和bin文件夹放在windows PATH变量中.没有成功.
  6. 我对这个答案抱有希望并回顾了注册表中的DllPath(实际上它应该与ODP.NET相关System.Data.OracleClient),并且看到DllPath指向正确的ODAC的x64安装,所以,如果我的应用程序不是使用System.Data.OracleClient,它应该工作,但由于它确实使用它,它仍然失败.
  7. 我用谷歌搜索和stackoverflew但没有找到任何其他我已经提到的帖子.
  8. 我精心设计了这个SO问题,希望能从开明的SO用户那里得到任何有见地的建议.
  9. 从b_levitt得到第一个答案后,我尝试将以下行添加到Global.asax Application_Start:

    Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:\OracleProducts\Odac-11.2.0.2.1-x64");
    Environment.SetEnvironmentVariable("PATH", @"C:\OracleProducts\Odac-11.2.0.2.1-x64;C:\OracleProducts\Odac-11.2.0.2.1-x64\bin");
    
    Run Code Online (Sandbox Code Playgroud)

    C:\ OracleProducts\Odac-11.2.0.2.1-x64是我安装ODAC 64位xcopy版本的地方.也没有成功.

在相关的说明中,我甚至试图强制我的.NET应用程序进入32位模式但没有成功,但这是另一回事.我需要一个前瞻性的解决方案,这意味着64位.

64-bit .net-4.0 windows-7 system.data.oracleclient oracle11gr2

9
推荐指数
1
解决办法
2万
查看次数

ORA-12571:TNS:使用ASP.NET的数据包写入程序失败

我的开发团队ORA-12571: TNS:packet writer failure使用ASP.NET 3.5和4.0对Oracle 11g 遇到了很多错误.这些错误在它们何时发生时是不一致的,并且由许多应用程序生成.调用随机存储过程,数据包和内联SQL语句时会发生此异常.Oracle 11客户端安装在Web服务器上.某些应用程序使用Microsoft System.Data.OracleClient连接到Oracle,有些应用程序使用oracle(ODP.NET)提供的.NET组件.两个数据访问对象都会出现相同的错误.

还有其他非.NET应用程序在不同的Web服务器上运行,但使用相同的数据库服务器.这些应用程序没有任何此类问题.我最初的想法是,使用Oracle客户端在Web服务器上配置错误.

有没有其他人收到此错误?你做了什么修复它?

ORA-12571: TNS:packet writer failure
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
   at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
   at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals)
   at System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet …
Run Code Online (Sandbox Code Playgroud)

asp.net odp.net oracle11g system.data.oracleclient

8
推荐指数
2
解决办法
2万
查看次数

如何在不使用过时的OracleConnection类的情况下建立OracleConnection

什么是建立OraConnection的"新"方式?Microsoft将几个类定义为过时的.

https://msdn.microsoft.com/en-us/library/system.data.oracleclient.aspx

我过去常常使用这些方面的东西:

 string queryString = 
    "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
using (OracleConnection connection = new OracleConnection(connectionString))
{
    OracleCommand command = new OracleCommand(queryString);
    command.Connection = connection;
    try
    {
        connection.Open();
        command.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
Run Code Online (Sandbox Code Playgroud)

但是,所有这些类似乎都被弃用了.

c# database oracle msdn system.data.oracleclient

7
推荐指数
1
解决办法
2万
查看次数

对于ODP.NET,有没有办法强制OracleCommand.BindByName为true?

由于不推荐使用System.Data.OracleClient库,因此我们正在迁移代码库以使用Oracle Data Provider for .NET(ODP.NET).我们遇到的一个问题是System.Data.OracleClient使用参数名绑定而不是按位置绑定,并且所有代码都直接访问System.Data.OracleClient.OracleCommand而不是使用中间数据层.

由于存在相当多的代码,是否有一种简单的方法可以强制ODP.NET OracleCommand.BindByName默认为true,或者我们必须在每次使用它时设置值?如果失败了,是否有一种简单的方法可以在Visual Studio 2008中插入这行代码?

.net oracle refactoring odp.net system.data.oracleclient

6
推荐指数
4
解决办法
1万
查看次数

什么时候Oracle数据库支持Dotnet Core?

我希望我的DotnetCore 2.0应用程序连接到Oracle,但是,我无法从Oracle支持中找到任何官方文档.预计将于2017年底根据此链接发布http://www.oracle.com/technetwork/topics/dotnet/tech-info/odpnet-dotnet-core-sod-3628981.pdf但它是仍然没有.

我们正在尝试与其他非官方库(dotNetCore.Data.OracleClient)连接到oracle,根据此线程如何连接到Oracle数据库连接来自.Net Core但它有很多限制,如

  1. 我们无法使用所有参数调用存储过程
  2. 调用时没有像ref这样的dotnet参数类型

我们在Oracle中拥有现有数据库,在DotNet 4.6中拥有应用程序.我们将在使用oracle数据库的Dotnet Core中重写我们的应用程序.

.net oracle oracleclient system.data.oracleclient .net-core

6
推荐指数
2
解决办法
2456
查看次数

命名空间"System.Data"中不存在类型或命名空间名称"OracleClient"

尝试运行我的代码时,收到以下错误:

CS0234:名称空间"System.Data"中不存在类型或命名空间名称"OracleClient"(您是否缺少程序集引用?)

我已经包含对System.Data.dll和的引用System.Data.OracleClient.dll,但我仍然收到此错误.

错误是由using System.Data.OracleClient我的命名空间声明中的行引起的.

c# reference oracleclient system.data system.data.oracleclient

5
推荐指数
1
解决办法
2万
查看次数

我们可以在 .Net 中使用 System.Data.OracleClient 来对抗 Oracle 19c 吗?

因此,我们将 Oracle 12.2 迁移到 19c,连接到 Oracle 服务的 Asp.Net 应用程序现在失败,并出现以下错误:Oracle 12560:TNS 协议适配器错误

首先,我想确认 .net dll System.Data.OracleClient 是否适用于 Oracle 19c,或者我们是否正在考虑强制迁移到 ODP.Net?

.net oracle asp.net-mvc system.data.oracleclient oracle19c

5
推荐指数
1
解决办法
3141
查看次数

使用 system.data.oracleclient 构建良好的搜索查询

我正在一个类中构建一个搜索函数,供我们的几个 asp 页面使用。这个想法很简单,从用户那里获取一个搜索词并在数据库中查询该项目。目前我这样做是错误的,这很容易受到 SQL 注入攻击(如果出现问题,ELMAH可以挽救这一天):

Public Shared Function SearchByName(ByVal searchterm As String) As DataTable
    SearchByName = New DataTable

    Dim con As New OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings("OracleDB").ConnectionString)



    Try
        con.Open()
        Dim SqlStr As String = "select ID_ELEMENT, ELEMENT_NAME from table_of_elements where upper(ELEMENT_NAME) like upper('%" & searchterm & "%')"
        Dim cmd As New OracleCommand(SqlStr, con)
        SearchByName.Load(cmd.ExecuteReader)





    Catch ex As Exception
        Elmah.ErrorSignal.FromCurrentContext().Raise(ex)

    End Try
    con.Close()
    con.Dispose()




    Return SearchByName
End Function
Run Code Online (Sandbox Code Playgroud)

字符串连接不好。接下来你知道,Bobby Tables破坏了我的系统。现在,正确的方法是创建一个合适的 oracle 变量,将 :searchterm 放入字符串并添加以下行:

cmd.Parameters.Add(New OracleParameter("SEARCHTERM", searchterm))
Run Code Online (Sandbox Code Playgroud)

问题是因为我使用了一个类似的语句,我需要能够在搜索词的两边都有 %,而我似乎无法用 '%:searchterm%' 来做到这一点,它只是给出了一个错误ORA-01036: …

vb.net asp.net oracleclient system.data.oracleclient ora-01036

2
推荐指数
1
解决办法
987
查看次数

使用OracleCommand获取oracle输出参数

我有一个oracle存储过程,它将返回一个值。我需要在C#程序中获取OUTPUT值。我需要知道如何使用OracleCommands AddWithValue方法获取OUTPUT参数。

我现在写的方式是:

 OracleCommand Ocmd = new OracleCommand(_StoredProcedure, OraCon);
    Ocmd.CommandType = CommandType.StoredProcedure;


            Ocmd.Parameters.AddWithValue("Filed1", "Value1");

            Ocmd.Parameters.AddWithValue("OUTPUTParam","").Direction = ParameterDirection.Output;

    OraCon.Open();
    int RecivedDetID = Ocmd.ExecuteNonQuery();
    OraCon.Close();

    return Ocmd.Parameters[_OutParam].Value.ToString();
Run Code Online (Sandbox Code Playgroud)

我知道我所说的OUTPUTPARAm是错误的。我如何使用OracleCommand的AddWithValue方法实现它。我不想在需要同时指定Type的地方使用OracleCommands Add方法。

asp.net oracle system.data.oracleclient

1
推荐指数
1
解决办法
1万
查看次数