StreamWriter向Clob字段写入问题

smallquick 2009-01-06 09:54:39

cmd.Transaction = cmd.Connection.BeginTransaction();
cmd.CommandText = getSql();
cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT content FROM doc_send FOR UPDATE ";
OracleDataReader reader = cmd.ExecuteReader();
using (reader)
{
reader.Read();

OracleLob clob = reader.GetOracleLob(0);

StreamWriter streamWrite = new StreamWriter(clob);
streamWrite.Write(getStr());

OracleLob templob = CreateTempLob(cmd, clob.LobType);
long actual = clob.CopyTo(templob);

cmd.Transaction.Commit();
}

我在控制台的时候通过这种方式是可以将数据写入clob字段的,但是在页面的cs文件中就不可以了,调试到
streamWrite.Write(getStr());
这一步时告诉链接已关闭,没办法访问数据库的clob字段,应该是权限问题,应该怎么解决
...全文
98 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
nj_1st_excellence 2009-01-07
  • 打赏
  • 举报
回复
using (reader)
{
reader.Read();

OracleLob clob = reader.GetOracleLob(15);

byte[] bytes = System.Text.Encoding.Unicode.GetBytes(getStr());
clob.Write(bytes, 0, bytes.Length);

clob.Position = 0;


OracleLob templob = CreateTempLob(cmd, clob.LobType);
long actual = clob.CopyTo(templob);


cmd.Transaction.Commit();

}

建议楼主用这种方式,我用过行的通的
lovehongyun 2009-01-06
  • 打赏
  • 举报
回复
对哦,dbm_lob只能处理小于32k字符

尐孑 2009-01-06
  • 打赏
  • 举报
回复
mark
smallquick 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lovehongyun 的回复:]
C# code
string fileName = "xxxx";
string fileclob = "xxxx";
System.Data.OracleClient.OracleConnection conn;
string connString = "数据库连接串;";
conn = new OracleConnection(connString);
conn.Open();
//用参数方式写入数据库
OracleCommand myComm = conn.CreateCommand();
//定义SQL语句
string sql = "insert i…
[/Quote]

这种方法布恩那个超过32k
smallquick 2009-01-06
  • 打赏
  • 举报
回复
谢谢楼上的,不过你的做法不能超过32k,而且我是文本不是byte【】
lovehongyun 2009-01-06
  • 打赏
  • 举报
回复

string fileName = "xxxx";
string fileclob = "xxxx";
System.Data.OracleClient.OracleConnection conn;
string connString = "数据库连接串;";
conn = new OracleConnection(connString);
conn.Open();
//用参数方式写入数据库
OracleCommand myComm = conn.CreateCommand();
//定义SQL语句
string sql = "insert into table(filename,fileclob) " +
" values(@filename,@fileclob)";

myComm.CommandText = sql;
myComm.Parameters.Add("@filename",OracleType.NVarChar).Value = fileName;
myComm.Parameters.Add("@fileclob",OracleType.Clob,System.Text.Encoding.Default.GetByteCount(fileclob)).Value = fileclob;

//写入数据库
myComm.ExecuteNonQuery();

hongqi162 2009-01-06
  • 打赏
  • 举报
回复

需要先创建一个临时lob才可以写的

OracleConnection connection = new OracleConnection("server=MyServer; integrated security=yes;");
connection.Open();
OracleTransaction transaction = connection.BeginTransaction();
OracleCommand command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
command.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
OracleLob tempLob = (OracleLob)command.Parameters[0].Value;
byte[] tempbuff = new byte[10000];
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
command.Parameters.Clear();
command.CommandText = "MyTable.MyProc";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
command.ExecuteNonQuery();
transaction.Commit();
connection.Close
smallquick 2009-01-06
  • 打赏
  • 举报
回复
页面有个文本编辑器,内容大小超过32k,将编辑器的内容存入orcale数据库的clob字段
jiang_jiajia10 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lovehongyun 的回复:]
没看懂你想干啥.你到底想实现什么?
[/Quote]
同感
lovehongyun 2009-01-06
  • 打赏
  • 举报
回复
没看懂你想干啥.你到底想实现什么?
wanghao3616 2009-01-06
  • 打赏
  • 举报
回复
iis没有权限操作 数据库文件
asp.net 日志管理 可以使用 Log4net

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧