Tag: oracle

如何使用带有ODP(Oracle.DataAccess)的>> prepared query <<更新CLOB字段中的数据?

我正在尝试执行准备好的SQL查询,该查询更新Oracle 10g数据库(10.2.0.1)中的CLOB字段。 如果我从SQL Developer内部执行以下查询并提供占位符的值,则没有问题。 但是,如果我通过OracleCommand (Oracle.DataAccess.dll,版本1.102.0.1(我认为),.NET Framework 3.5)执行它,我会收到以下错误消息。 请注意,我们不使用默认的oracle客户端,因为我们需要批量插入。 不幸的是,给定的ODP版本和.NET Framework版本是一项艰难的要求,我们可能不会改变它。 查询: UPDATE master_table SET description = :description, modification_notes = :modification_notes WHERE master_id = :master_id; 错误: ORA-00932:不一致的数据类型:预期 – 获得CLOB 进一步的信息: 参数分配如下: var param_description = new OracleParameter(“:description”, OracleDbType.Clob); param_description.Value = “Test”; 我尝试过以下的事情: 将to_clob()插入SQL查询 将Oracle.DataAccess.Types.OracleClob对象分配给参数。 我也找到了以下描述,但我真的希望能够保留准备好的查询。 如何使用C#在Oracle中插入CLOB字段 是否可以通过准备好的查询来完成此操作? 我附上了一个产生错误的完整示例。 DESCRIPTION和MODIFICATION_NOTES是数据库中CLOB类型的两列。 输入数据: 连接: OracleConnection到数据库 master_id:要过滤的主键 码: 免责声明:我手动输入以下示例,可能存在实际代码中没有的错误 var […]

Visual Studio Server Explorer是否支持自定义数据库提供程序?

在我的一些学习项目中,我曾使用Server Explorer和相关工具与Microsoft SQL Server进行图形数据库开发 – 这是一次很棒的体验。 但是,在我的工作中,我处理Oracle DB和SQLite,我的爱好项目使用MySQL(因为它们托管在Linux上)。 有没有办法利用Visual Studio中与其他数据库提供程序相关的数据库相关工具?

如何在我的开发环境中从Windows 7 x64上的C#连接到Oracle数据库

我在Windows 7×64上连接到Oracle数据库时遇到了困难 我的环境如下: Windows 7×64 Visual Studio 2012 Oracle 10g(带32位客户端) 的WinForms 我已经将所有项目的目标CPU明确地设为x86 CPU(而不是Any或x86) 我正在使用DbProviderFactory.GetFactory进行连接 我的app.config中的My ConnectionString条目如下所示: (我已尝试使用各种样式的连接字符串但没有成功) 当我编译应用程序时,如果我从Debug文件夹运行可执行文件,它就能正常连接。 但是,如果我尝试在Visual Studio中运行它,则在打开连接时它会失败 ORA-06413: Connection not open.\n 这是一个如何被调用的例子: [TestMethod] public void ConnectToOracle_Success() { var connectionStringSettings = ConnectionBuilder.GetConnectionStringSetting(OracleConnectionName); var providerFactory = ConnectionBuilder.GetProviderFactory(connectionStringSettings); ConnectionBuilder.ValidateConnectionString(connectionStringSettings); using (var connection = providerFactory.CreateConnection()) { Assert.IsNotNull(connection); connection.ConnectionString = connectionStringSettings.ConnectionString; try { connection.Open(); } catch (Exception […]

在c#中执行参数化查询时出现ORA-01745错误

我正在做类似的事情 … OracleCommand oCommand = new OracleCommand(); oConnection.Open(); oCommand.Connection = oConnection; oCommand.CommandText = “SELECT * FROM employees WHERE user = :User”; oCommand.Parameters.AddWithValue(“:Name”, “Employee1”); DbDataReader dbRdr = oCommand.ExecuteReader(); 然后这会引发exception: ORA-01745:无效的主机/绑定变量名称 编辑:连接字符串如下所示: “Data Source=orcl;Persist Security Info=True;User ID=user_id;Password=pwd;Unicode=True” oConnection.Open();之后没有错误oConnection.Open(); 所以我假设我的连接字符串是正确的。 我犯了哪个部分?

使用ODP.Net托管客户端将对象数组传递给oracle存储过程

我在我的Web API中有以下Employee类。 public class Employee { public string Name { get; set; } public string City { get; set; } } 我的Web API会在每个请求中收到50个员工记录的列表,并且需要在Oracle数据库中更新这些详细信息。 我遵循将整数数组传递给Oracle存储过程的相同方法,并尝试了以下方法。 在Oracle中创建了以下类型和存储过程。 – 基础类型 create or replace type EMPTEST AS OBJECT ( Name varchar2(50), City varchar2(50) ); – 包 create or replace PACKAGE pkgUDFArray_Test AS type “T_EMPUDF_ARRAY” is table of EMPTEST; PROCEDURE […]

Odp.Net – 取决于客户端和服务器

我对理论提出质疑。 我的应用程序使用Odp.Net。 我添加了Oracle.DataAccess.dll版本2.112.3.0作为参考文件。 我使用Odp.Net来查询数据库和注册表查询通知 。 在每台计算机上,我从http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html安装ODAC 11.2第5版(11.2.0.3.20)。 我想知道我的Odp.Net版本,Oracle客户端版本(可以安装在客户端计算机上)和Oracle Server版本之间存在哪些依赖关系。 问题是,在我注册查询通知后,我可以看到USER_CHANGE_NOTIFICATION_REGS表中的行。 但几秒钟后,此通知未注册并消失。 我读到这与版本问题有关,但我无法理解我必须做什么。 我的目标是在我的应用程序中使用相同的Odp.Net文件(Oracle.DataAccess.dll +一些额外的依赖项,如oci.dll等)。

使用ODP.NET与企业库DAAB连接Oracle

我们的应用程序使用Enterprise Library DAAB来支持oracle和sql数据库。 其中一个存储过程用于将图像上载到表格。 它是一个BLOB字段,参数设置为DbType.Binary。 这个function对SQL没有任何问题,但是当遇到Oracle时,我遇到了32K参数大小限制问题。 正如SO中所建议的那样,我将代码移到了ODP.NET,但我仍面临同样的问题。 我的App.config文件设置: 在我的应用程序代码中,我使用企业库来访问数据库 Database db = DatabaseFactory.CreateDatabase(); DbCommand cmd = db.GetStoredProcCommand(spName); cmd.CommandType = CommandType.StoredProcedure; db.AddInParameter(cmd, “DOCIMAGE”, DbType.Binary, GetByteArrayFromFile(filePath)); db.AddOutParameter(cmd, “return_value”, DbType.Int32, 128); int row = db.ExecuteNonQuery(cmd); 我的项目中引用了以下程序集: 现在,当我运行应用程序时,Ent Lib DAAP应该使用Oracle.DataAccess.Client,但它仍然通过System.Data.OracleClient连接到oracle db。 所以还有32K的限制。 为什么它没有使用Oracle数据提供程序,因为我已在App.config中明确提到过? 在一篇文章中,提到使用以下代码段作为解决方法, DbProviderFactory providerFactory = DbProviderFactories.GetFactory(“Oracle.DataAccess.Client”); Database db = GenericDatabase(connectionString, providerFactory); 这个看起来很有效。 但实例化的数据库是GenericDatabase而不是OracleDatabase,这可能就是为什么即使这个工作仍然在文件大小超过32K时抛出exception。 如何将ODP.NET与Enterprise Library一起用于32K大小限制问题? 决议 : […]

如何在Oracle中存储一个字节数组?

我想在Oracle数据库中存储一个64字节的短数组(密码哈希)。 我认为char(64 byte)是我需要的,但似乎它不起作用。 在Microsoft SQL中,我使用binary和varbinary类型。 我需要在Oracle中使用哪种类型? 我发现的每个例子都使用blob来存储二进制数据,但我认为blob仅适用于大型对象,而不适用于固定大小的短数组。 更新数据时,这样的代码是否合适: byte[] passwordHash = GenerateHash(); using (OracleCommand updateHash = new OracleCommand(“update A set passwordHash = :hash where EntryId = :id”, oracleConnection)) { updateHash.Parameters.Add(“:hash”, passwordHash); updateHash.Parameters.Add(“:id”, entryId); if (updateHash.ExecuteNonQuery() != 1) { // … } } 或者我错过了什么,字节数组参数不能像这样添加?

EntityFramework Code First Oracle

我有跟随上下文,映射和用于与oracle一起工作的类: public class Context : DbContext { public string Schema { get; set; } public Context(string connectionString) : base(connectionString) { } public DbSet UserDbSet { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new UserMapping(Schema)); } } public class User { public decimal Id { get; set; } public string Name { get; set; […]

为什么这个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()); } const string InsertContracts = “merge into CONTRACT t ” + “using ” + “(select […]