【问题标题】:Obtaining LONG RAW Data (Bytes) from EnterpriseLibrary从 EnterpriseLibrary 获取 LONG RAW 数据(字节)
【发布时间】:2018-01-06 00:06:31
【问题描述】:

我无法从 oracle 获取图像字节数据。 reader("image") 总是返回 0 长度。他们有什么解决方法吗?如果我使用oledb,那么它可以工作但不能使用Microsoft EnterpriseLibrary

using (IDataReader reader = ExecuteNonQueryOracle(Query)) 
    {
            while (reader.Read) {
                dict("image") = reader("image");
            }
    }
public object ExecuteNonQueryOracle(string Query)
{

        using (dbCommand == CurrentDatabase.GetSqlStringCommand(Query)) {
            dbCommand.CommandType = CommandType.Text;
            return CurrentDatabase.ExecuteReader(dbCommand);
        }

}

【问题讨论】:

  • ExecuteNonQueryOracle 是一个颇具误导性的方法名称。
  • @mjwills 我只是为了理解这个问题而提出的。

标签: c# oracle oracle11g enterprise-library


【解决方案1】:

尝试使用OracleDataReaderOracleBlob 作为数据类型:

using (OracleDataReader reader = cmd.ExecuteReader())
{
   while (reader.Read())
      {
         if (!reader.IsDBNull(reader.GetOrdinal("FILE")))
               {
                 OracleBlob doc = reader.GetOracleBlob(reader.GetOrdinal("FILE"));
                  if (!doc.IsNull)
                   {
                       docBytes = new byte[doc.Length];
                       doc.Read(docBytes, 0, (int)doc.Length);
                   }
               } 
      }
}

【讨论】:

  • 我只有一个使用 Enterprise Library 的选项。
【解决方案2】:

如果 ExecuteNonQuery 方法返回 0,那么一个原因可能很明显,即您的查询的 where 子句与表中的任何行都不匹配。

我从网上得到了这个帖子,这可能会有所帮助

发生在我身上的另一种情况是,当我使用企业库数据应用程序块使用 ExecuteNonQuery 方法执行更新 sql 查询时,我使用数据库对象的 AddInParameter 方法传递输入参数,顺序与不匹配我的更新sql中的参数顺序,尤其是where子句中的输入参数。所以一旦我在一堆AddInParameter子句的末尾使用AddInParameter传入where子句参数,问题立即解决了。

【讨论】:

  • 我上面已经提到,通过 oledb 连接它返回数据。问题仅在于 EnterpriceLibrary
猜你喜欢
  • 2011-12-22
  • 1970-01-01
  • 2011-07-26
  • 2017-06-12
  • 2021-06-09
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多