Oracle 存图片

04206302 贡献于2013-05-24

作者 neusoft  创建于2011-03-30 02:24:00   修改者neusoft  修改于2011-03-30 02:24:00字数1484

文档摘要:.net有两种方式向Oracle的blob字段中存储图片
关键词:

Oracle存图片 默认分类 2010-04-21 11:58:03 阅读279 评论0   字号:大中小 订阅 .net有两种方式向Oracle的blob字段中存储图片: 在存储之前都需要获取图片的字节数组,示例代码如下: using (FileStream fs = new FileStream(sFiles[i], FileMode.Open)) { len = int.Parse(fs.Length.ToString()); bBuffer = new byte[len]; fs.Read(bBuffer, 0, len); } 下面说明将读取的字节数组存入Oracle中的Blob字段的两种方法: (1)使用OracleLob对象的Write方法。代码如下: OracleCommand cmd = conn.CreateCommand(); cmd.CommandText = "Select ... For Update"; cmd.Transaction= conn.BeginTransaction(); using(reader = cmd.ExecuteReader()) { OracleLob blob = reader.GetOracleLob(blobIndex); blob.Write(bBuffer, 0, bBuffer.Length); } cmd.Transaction.Commit(); 这种方法有两个关键点:一是在写查询的SQL语句时,需要在最后添加“For Update”,否则会出错;二是需要将blob的Write方法包含在Oracle的事务处理中,即下面的两句代码: cmd.Transaction= conn.BeginTransaction(); cmd.Transaction.Commit(); (2)使用OracleDataAdapter的Update方法,改方法的示例代码如下: cmd = new OracleCommand(); cmd.Connection = conn; //更新数据 adapter = new OracleDataAdapter("Select ...", conn); DS = new DataSet(m_sTbName); adapter.UpdateCommand = new OracleCommand("Update " + m_sTbName + " set " + sBlobFieldName + "=:NewImage " + "Where " + m_sKeyFieldName + "= '" + sKeyFieldValue + "'", conn); adapter.UpdateCommand.Parameters.Add(":NewImage", OracleType.Blob, bBuffer.Length, sBlobFieldName); adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; adapter.FillSchema(DS, SchemaType.Source, m_sTbName); //填充数据集 adapter.Fill(DS, m_sTbName); //寻找当前图片文件对应的记录 row = DS.Tables[m_sTbName].Rows.Find(sKeyFieldValue); //开始编辑行 row.BeginEdit(); if (bBuffer.Length != 0) { row[sBlobFieldName] = bBuffer; } row.EndEdit(); //对数据库进行更新 adapter.Update(DS, m_sTbName); 两种方法相比,第一种方法效率更高,也跟简单。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档