惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
月光博客
月光博客
IT之家
IT之家
B
Blog RSS Feed
T
Tailwind CSS Blog
The GitHub Blog
The GitHub Blog
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - Franky
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
博客园_首页
B
Blog
V
V2EX
腾讯CDC
Vercel News
Vercel News
量子位
Microsoft Security Blog
Microsoft Security Blog

博客园 - lae

[转]程序员应知: 海量数据如何分析 [转]Web开发者必备的12款超赞jQuery插件 NOSql数据库特性对比 NHibernate3新特性初尝 - lae - 博客园 微软回答“关于数据的10个问题” SubSonic 3.0新特性 SubSonic入门(下) SubSonic入门(上) SubSonic的controller类的FetchByID()错误解决办法 - lae - 博客园 ASP.NET中文版开发建议 - lae - 博客园 spl工作在remoting方式下的问题总结 - lae - 博客园 [转载]世界杯期间制定给女友或老婆的十二条准则 - lae - 博客园 sql server 2000关于日期的查询 - lae C# 2.0 杂项技术,以及C#语言的未来发展(选择自 shoutor 的 Blog ) C# 2.0 泛型编程(选择自 shoutor 的 Blog ) C# 2.0 匿名方法、迭代器(选择自 shoutor 的 Blog ) C# 2.0 局部类型、空属类型、静态类(选择自 shoutor 的 Blog) 关于在vs.net中的.htm里面添加连接,就会出现下载.ASPX文件的提示? Microsoft Enterprise Library June 2005--Data Access Application Block访问Oracle数据库(1)
System.Data.OracleClient调用带blob等大字段类型参数的存储过程
lae · 2009-11-25 · via 博客园 - lae

    System.Data.OracleClient在插入大字段类型的时候有32K大小限制,据网络收集的一些方法,整理了一下如下(微软企业库示例):

必须在获取临时 LOB 之前开始事务。否则,OracleDataReader 将不能获取后面的数据。

还可以通过调用 DBMS_LOB.CREATETEMPORARY 系统存储过程并绑定 LOB 输出参数打开 Oracle 中的临时 LOB。在客户端,临时 LOB 的行为很像基于表的 LOB。例如,要更新临时 LOB,它必须包含在事务中。

 

OracleConnection conn = Db.CreateConnection() as OracleConnection;
            conn.Open();
            OracleTransaction trans = conn.BeginTransaction() as OracleTransaction;
            OracleCommand cmd = Db.DbProviderFactory.CreateCommand() as OracleCommand;

            try
            {
                cmd.Transaction = trans;
                cmd.Connection = conn;
                cmd.CommandText = "GetTempBlob";
                //存储过程:GetTempBlob
                //"declare dpBlob blob; begin dbms_lob.createtemporary(dpBlob, false, 0); :tempblob := dpBlob; end;";
                //
                cmd.Parameters.Add(new OracleParameter("tmpBlob", OracleType.Blob)).Direction = ParameterDirection.Output;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();
                OracleLob tmpBlob = (OracleLob)cmd.Parameters[0].Value;
                tmpBlob.BeginBatch(OracleLobOpenMode.ReadWrite);
                tmpBlob.Write(bytNR, 0, bytNR.Length);
                tmpBlob.EndBatch();

                //执行插入存储过程
                cmd.Parameters.Clear();
                cmd.CommandType = CommandType.StoredProcedure;
                //cmd.Transaction = trans;
                cmd.CommandText = "pkg_ManoeuvreScheme.Pro_SaveManoeuvreScheme";
                Db.AddInParameter(cmd, "v_guid", DbType.String, "1");
                Db.AddInParameter(cmd, "v_yxfamc", DbType.String, strYXFAMC);
                Db.AddInParameter(cmd, "v_dy", DbType.String, strDY);
                Db.AddInParameter(cmd, "v_bxsj", DbType.DateTime, dtBXSJ);
                Db.AddInParameter(cmd, "v_yxfanr", DbType.String, strYXFANR);
                Db.AddInParameter(cmd, "v_pj", DbType.String, strPJ);
                Db.AddInParameter(cmd, "v_bz", DbType.String, strBZ);
                Db.AddInParameter(cmd, "v_wdmc", DbType.String, strWDMC);
                Db.AddParameter(cmd, "v_nr", OracleType.Blob, bytNR.Length,
                    ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Current, tmpBlob);
                int ret = cmd.ExecuteNonQuery();

                trans.Commit();

                return ret;

            }
            catch (Exception ex)
            {
                trans.Rollback();
                Logger.Error(ex);
                throw ex;
            }
            finally
            {
                conn.Close();
            }