我在我的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:无效字符"错误.
我对下面参数的绑定有问题.连接有效,因为我在不使用参数的情况下测试了它.但是,执行前查询的值仍然使用'@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#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) 使用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
我正在尝试运行System.Data.OracleClient在Win7 x64工作站上使用的.NET应用程序.工作站安装了32位Oracle客户端,导致以下错误消息:
尝试加载Oracle客户端库会引发BadImageFormatException.在安装了32位Oracle客户端组件的64位模式下运行时,将发生此问题.
所以这是我漫长的尝试和失败之旅:
System.Data.OracleClient),并且看到DllPath指向正确的ODAC的x64安装,所以,如果我的应用程序不是使用System.Data.OracleClient,它应该工作,但由于它确实使用它,它仍然失败.从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
我的开发团队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) 什么是建立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)
但是,所有这些类似乎都被弃用了.
由于不推荐使用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中插入这行代码?
我希望我的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但它有很多限制,如
我们在Oracle中拥有现有数据库,在DotNet 4.6中拥有应用程序.我们将在使用oracle数据库的Dotnet Core中重写我们的应用程序.
尝试运行我的代码时,收到以下错误:
CS0234:名称空间"System.Data"中不存在类型或命名空间名称"OracleClient"(您是否缺少程序集引用?)
我已经包含对System.Data.dll和的引用System.Data.OracleClient.dll,但我仍然收到此错误.
错误是由using System.Data.OracleClient我的命名空间声明中的行引起的.
c# reference oracleclient system.data system.data.oracleclient
因此,我们将 Oracle 12.2 迁移到 19c,连接到 Oracle 服务的 Asp.Net 应用程序现在失败,并出现以下错误:Oracle 12560:TNS 协议适配器错误
首先,我想确认 .net dll System.Data.OracleClient 是否适用于 Oracle 19c,或者我们是否正在考虑强制迁移到 ODP.Net?
我正在一个类中构建一个搜索函数,供我们的几个 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
我有一个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方法。
oracle ×8
c# ×5
oracleclient ×4
.net ×3
asp.net ×3
odp.net ×2
.net-4.0 ×1
.net-core ×1
64-bit ×1
ado.net ×1
asp.net-mvc ×1
clob ×1
database ×1
msdn ×1
ora-01036 ×1
oracle11g ×1
oracle11gr2 ×1
oracle19c ×1
refactoring ×1
reference ×1
system.data ×1
vb.net ×1
windows-7 ×1