注意
1、操作clob不是blob,其实它两个差不多,不过我不想再试验了!
2、请用OracleClient不要用oledb;
3、不要贴微软.net2003的东东,我试了整整一下午了,有错误。
解决就给分。
up者有分。
贴错的不给分,别怪我啊!!!!!
1、操作clob不是blob,其实它两个差不多,不过我不想再试验了!
2、请用OracleClient不要用oledb;
3、不要贴微软.net2003的东东,我试了整整一下午了,有错误。
解决就给分。
up者有分。
贴错的不给分,别怪我啊!!!!!
解决方案 »
- 关于静态页面的js+ajax分页很迷惑求解!
- 一个奇怪,很BT的问题
- gridview定义的dropdownlist控件怎么绑定到字段,且GridView1_RowDeleting都没有效果,在线等
- 在样控制textBox自动换行
- 为何在引用用户控件的页面找不到该用户控件里面的控件?
- 如何让Panel&DataGrid随窗口大小的变化自动调整呢??
- 无法在Web服务器上启动调试。未将项目配置为进行调试。
- 大家讨论一下,写ASP.NET用哪种语言比较好!
- 关于站内搜索的问题及判断用户是否登陆的问题~`~~高手来指教!!!
- 删除行按钮怎么写?
- 怎么将字符串转换成io.textreader或者io.stream格式?
- 请教!一个网站,两个登陆页面如何实现?
cmd.Transaction = cmd.Connection.BeginTransaction();
//Select some data.
cmd.CommandText = "SELECT * FROM db1 FOR UPDATE ";
OracleDataReader reader = cmd.ExecuteReader();
using(reader)
{ reader.Read();
//Obtain a LOB.
OracleLob clob =reader.GetOracleLob(3);
clob.Write(bt, 0, bt.Length );
cmd.Transaction.Commit();
}
//这是我试验的代码每次到clob.Write时就出错。说connection closed的,帮帮忙啊!
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;309158
建议你拖一个表到窗体上看.net 生成的命令就明白了
http://otn.oracle.com/oramag/oracle/03-mar/o23odp.htmlhttp://www.codeproject.com/aspnet/upsanddowns.asp
using Fjeptri.DataAccess.DataHelper;
using System.Data.OracleClient;
using System.Data;
using System.IO;
using System.Windows.Forms;
using blank;namespace WindowsApplication1
{
/// <summary>
/// Clob 的摘要说明。
/// </summary>
public class Clob
{
public Clob()
{
//
// TODO: 在此处添加构造函数逻辑
//
} public void InsertClob() //插入Clob内容
{
//输入文件内容
Stream stream = Stream.Null;
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.CheckFileExists = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
stream = openFileDialog.OpenFile();
string fileName = openFileDialog.FileName;
}
else
{
return;
}
stream.Position =0 ;
StreamReader streamReader = new StreamReader(stream);
string context = streamReader.ReadToEnd();
//向数据库提交内容。
OracleConnection conn = new OracleConnection(ConfigInfo.GetConnectionString());
if(conn.State == ConnectionState.Closed)
{
conn.Open();
}
OracleTransaction transaction =conn.BeginTransaction();
string Create="insert into tablewithlobs(a,c) values(tablewithlobs_seq.nextval,:Clob)";
OracleParameter[] param=new OracleParameter[1];
param[0]=new OracleParameter("Clob",OracleType.Clob);
param[0].Value = context;
OracleHelper.ExecuteNonQuery(transaction,CommandType.Text,Create,param); transaction.Commit();
conn.Close();
streamReader.Close();
stream.Close();
MessageBox.Show("插入成功!");
} public void ReadCLob(decimal A) //读出Clob内容
{
//从数据库读出内容
string Read = "select c from tablewithlobs where a =:a";
OracleParameter[] param=OracleHelper.GetCacheParameter(Read);
if(param==null)
{
param=new OracleParameter[1];
param[0]=new OracleParameter("a",OracleType.Number);
OracleHelper.CacheParameter(Read,param);
}
param[0].Value = A;
OracleDataReader dr = OracleHelper.ExecuteReader(ConfigInfo.GetConnectionString(),CommandType.Text,Read,param);
OracleLob clob = OracleLob.Null;
while(dr.Read())
{
clob = dr.GetOracleLob(0);
}
//打开保存内容的文件
string filename =string.Empty;
byte[] buffer=null;
SaveFileDialog saveFileDialog = new SaveFileDialog();
if(saveFileDialog.ShowDialog() == DialogResult.OK)
{
filename = saveFileDialog.FileName;
}
if(filename == string.Empty)
{
MessageBox.Show("请确定保存的文件路径!");
return;
} //将Clob类型的内容转化成文件流类型
buffer = new byte[clob.Length];
clob.Read(buffer,0,buffer.Length); //将内容写入文件
FileStream fs= new FileStream(filename,FileMode.OpenOrCreate);
fs.Write(buffer,0,buffer.Length);
fs.Close();
MessageBox.Show("读取成功!");
}
public void DeleteClob(decimal A) //删除Clob内容
{
OracleConnection conn = new OracleConnection(ConfigInfo.GetConnectionString());
conn.Open();
OracleTransaction transaction = conn.BeginTransaction();
string Delete="delete from tablewithlobs where a=:a";
OracleParameter[] param=OracleHelper.GetCacheParameter(Delete);
if(param==null)
{
param=new OracleParameter[1];
param[0]=new OracleParameter("a",OracleType.Number);
OracleHelper.CacheParameter(Delete,param);
}
param[0].Value=A;
OracleHelper.ExecuteNonQuery(transaction,CommandType.Text,Delete,param);
transaction.Commit();
conn.Close();
MessageBox.Show("删除成功!");
} public void UpdateBlob(decimal A) //更新Clob内容
{
//提交更新的文件内容
Stream stream = Stream.Null;
OpenFileDialog openFileDialog = new OpenFileDialog();
string fileName = openFileDialog.FileName;
openFileDialog.CheckFileExists = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
stream = openFileDialog.OpenFile();
}
else
{
return;
}
StreamReader streamReader = new StreamReader(stream);
string Context = streamReader.ReadToEnd(); //更新数据库内容
string Update = "update tablewithlobs set c = :context where a = :a;";
OracleConnection conn = new OracleConnection(ConfigInfo.GetConnectionString());
conn.Open();
OracleTransaction transaction = conn.BeginTransaction();
OracleParameter[] param=OracleHelper.GetCacheParameter(Update);
if(param==null)
{
param=new OracleParameter[2];
param[0]=new OracleParameter("a",OracleType.Number);
param[1]=new OracleParameter("context",OracleType.Clob);
OracleHelper.CacheParameter(Update,param);
}
param[0].Value = A;
param[1].Value = Context;
OracleHelper.ExecuteNonQuery(transaction,CommandType.Text,Update,param);
transaction.Commit();
conn.Close();
streamReader.Close();
stream.Close();
MessageBox.Show("更新成功!");
} }
}这是我曾经用过的,把clob内容读到指定文件中,说明一下,using Fjeptri.DataAccess.DataHelper是我自己写的一个dll,封装了对oracle数据库的连接,执行等操作,所以有关这方面的代码你要自己写。希望对你有帮助。